如何配置具有两个端点的WCF服务,以便为每个端点使用不同的ListenUri?

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能够支持多个绑定,我试图配置和运行服务,从而可以显示端点都webHttpBindingbasicHttpBinding.该服务似乎启动良好.但是,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)

Raj*_*esh 8

只需使用基本或webhttp端点的值指定address属性即可区分其地址.例如:

<endpoint behaviorConfiguration="web" address="rest" binding="webHttpBinding" bindingConfiguration="general" contract="MyProject.Contracts.IGeneralService" /> 
Run Code Online (Sandbox Code Playgroud)

应该解决你的问题