Ste*_*mer 4 wcf basichttpbinding webhttpbinding windows-phone-7
我有一个WCF服务,使用它来公开端点webHttpBinding,并由WPF和ASP.NET应用程序使用.一切都很好.
我现在正试图从Windows Phone(WP7)中使用该服务.但是,由于.NET Framework还没有完全赶上WP7,因此System.ServiceModel.Web命名空间不可用,结果是webHttpBinding在WP7中不起作用.
现在,在我的服务上,如果我将其切换webHttpBinding为a basicHttpBinding,则手机应用程序可以运行.
我不想重写我的WPF和ASP.NET应用程序来使用basicHttpBinding它.
据我所知,WCF能够支持多个绑定,我试图配置和运行服务,从而可以显示端点都webHttpBinding和basicHttpBinding.该服务似乎启动良好.但是,WPF和ASP.NET应用程序无法访问它.当我尝试在WP7应用程序中创建服务引用时,我收到以下消息:
绑定实例已与侦听URI"http:// localhost:1726/GeneralService.svc"关联.如果两个端点想要共享相同的ListenUri,则它们还必须共享相同的绑定对象实例.两个冲突的端点要么在AddServiceEndpoint()调用中,在配置文件中指定,要么在AddServiceEndpoint()和config的组合中指定.
一位同事和我都打得四处多种变化的baseAddress,address以及listenUri没有任何的运气属性.我们现在正处于试验和错误的阶段,这并不是非常有效.
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<bindings>
<basicHttpBinding>
<binding name="generalBasic" />
</basicHttpBinding>
<webHttpBinding>
<binding name="general" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="MyProject.GeneralService">
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="generalBasic"
contract="MyProject.Contracts.IGeneralService" />
<endpoint behaviorConfiguration="web"
binding="webHttpBinding"
bindingConfiguration="general"
contract="MyProject.Contracts.IGeneralService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:1726/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
只需使用基本或webhttp端点的值指定address属性即可区分其地址.例如:
<endpoint behaviorConfiguration="web" address="rest" binding="webHttpBinding" bindingConfiguration="general" contract="MyProject.Contracts.IGeneralService" />
Run Code Online (Sandbox Code Playgroud)
应该解决你的问题
| 归档时间: |
|
| 查看次数: |
9947 次 |
| 最近记录: |