【发布时间】:2012-02-08 20:59:51
【问题描述】:
我有一个 WCF 服务,它使用 webHttpBinding 公开一个端点,并被 WPF 和 ASP.NET 应用程序使用。一切都很好。
我现在正尝试从 Windows Phone (WP7) 使用该服务。但是,由于 .NET Framework 还没有完全赶上 WP7,System.ServiceModel.Web 命名空间不可用,导致webHttpBinding 在 WP7 中不起作用。
现在,在我的服务中,如果我将webHttpBinding 换成basicHttpBinding,电话应用程序就可以工作了。
我不想为了使用basicHttpBinding 而重新设计我的 WPF 和 ASP.NET 应用程序。
我了解 WCF 能够支持多个绑定,并且我已尝试配置和运行该服务,以便它公开 webHttpBinding 和 basicHttpBinding 的端点。该服务似乎启动良好。但是,WPF 和 ASP.NET 应用程序无法访问它。当我尝试在 WP7 应用程序中创建服务引用时,我收到以下消息:
绑定实例已经关联到监听 URI 'http://localhost:1726/GeneralService.svc'。如果两个端点想要 共享同一个 ListenUri,它们也必须共享同一个绑定对象 实例。两个冲突的端点要么在 AddServiceEndpoint() 调用,在配置文件中,或组合 AddServiceEndpoint() 和配置。
我和一位同事对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>
【问题讨论】:
-
只需使用基本或 webhttp 端点的值指定地址属性,以区分其地址。例如:
应该可以解决您的问题 -
嗯...有趣,我之前尝试过,但没有成功。 (也许我添加了设置我的basicHttpBinding而不是我的webHttpBinding的地址属性)。不过,这一次,正如您所建议的,我设置了 webHttpBinding 的地址属性,并且 WP7 应用程序连接良好。将新值附加到我的 WPF 和 MVC 客户端应用程序的地址属性后,一切似乎都像魅力一样工作。发表您的评论作为答案,我会给您。谢谢:-)
标签: wcf windows-phone-7 basichttpbinding webhttpbinding