求助,Silverlight同时使用Http绑定和TCP绑定的WCF服务的问题 100
环境:客户端:Silverlight4,服务端(.netfx4.0,wcf)这个系统是提供给企业内部使用的,我希望系统能自动根据运行环境来选择通过http或者tcp来访问...
环境:客户端:Silverlight4,服务端(.netfx 4.0,wcf)
这个系统是提供给企业内部使用的,我希望系统能自动根据运行环境来选择通过http或者tcp来访问wcf服务.如果允许在浏览器中,使用basichttpbinding,如果在浏览器外运行,则使用tcpnetbinding,以获得更好的性能.
我在Silverlight中首先添加了http绑定的wcf服务,然后手工修改配置文件.在配置文件中添加了Tcpnet绑定的内容,希望两个服务可以共用一个Contact.终结点的配置如下:
<endpoint address="http://localhost/abcService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding" contract="Server.IAbcService" name="BasicHttpBinding_IAbcService" />
<endpoint address="net.tcp://localhost:4512/abcService" binding="customBinding" bindingConfiguration="NetTcpBinding_AbcService" contract="Server.IAbcService" name="NetTcpBinding_IAbcService" />
然后在代码中这样获取服务,这是个服务工厂,对于使用者是透明的:
public static AbcServiceClient GetAbcService()
{
if (Application.Current.IsRunningOutOfBrowser)
{
var addr = AppContext.TcpServerHost + ":4512/AbcService";
Log.Debug("Service Address is:" + addr);
var client = new AbceServiceClient("NetTcpBinding_IAbcService", addr);
return client;
}
else
{
var addr = AppContext.ServerHost + "/AbcService.svc";
return new AbcClient("BasicHttpBinding_IAbcService", addr);
}
}
结果发现,在浏览器中运行使用http绑定都是正常的,而在浏览器外使用tcp下,无法工作.
请教,自动选择服务绑定的思路是否可行,我该如何做.
附:如果在添加服务的时候,添加的是tcp绑定的服务,然后在配置文件中添加http绑定,结果是反过来,tcp可用,而http不可用.
如果同时添加两种服务,那么两个服务的名称空间不一致,无法实现服务工厂. 展开
这个系统是提供给企业内部使用的,我希望系统能自动根据运行环境来选择通过http或者tcp来访问wcf服务.如果允许在浏览器中,使用basichttpbinding,如果在浏览器外运行,则使用tcpnetbinding,以获得更好的性能.
我在Silverlight中首先添加了http绑定的wcf服务,然后手工修改配置文件.在配置文件中添加了Tcpnet绑定的内容,希望两个服务可以共用一个Contact.终结点的配置如下:
<endpoint address="http://localhost/abcService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding" contract="Server.IAbcService" name="BasicHttpBinding_IAbcService" />
<endpoint address="net.tcp://localhost:4512/abcService" binding="customBinding" bindingConfiguration="NetTcpBinding_AbcService" contract="Server.IAbcService" name="NetTcpBinding_IAbcService" />
然后在代码中这样获取服务,这是个服务工厂,对于使用者是透明的:
public static AbcServiceClient GetAbcService()
{
if (Application.Current.IsRunningOutOfBrowser)
{
var addr = AppContext.TcpServerHost + ":4512/AbcService";
Log.Debug("Service Address is:" + addr);
var client = new AbceServiceClient("NetTcpBinding_IAbcService", addr);
return client;
}
else
{
var addr = AppContext.ServerHost + "/AbcService.svc";
return new AbcClient("BasicHttpBinding_IAbcService", addr);
}
}
结果发现,在浏览器中运行使用http绑定都是正常的,而在浏览器外使用tcp下,无法工作.
请教,自动选择服务绑定的思路是否可行,我该如何做.
附:如果在添加服务的时候,添加的是tcp绑定的服务,然后在配置文件中添加http绑定,结果是反过来,tcp可用,而http不可用.
如果同时添加两种服务,那么两个服务的名称空间不一致,无法实现服务工厂. 展开
2个回答
展开全部
bindingConfiguration 这个地方的配置有问题,无法了服务端产生一一对应关系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
大雅新科技有限公司
2024-11-19 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询