4

webHttpBindingを使用してエンドポイントを公開し、WPF と ASP.NET アプリケーションの両方で消費されるWCF サービスがあります。すべてがうまく機能します。

現在、Windows Phone (WP7) からサービスを利用しようとしています。ただし、.NET Framework はまだ WP7 に完全に追いついていないため、System.ServiceModel.Web名前空間が使用できwebHttpBindingず、WP7 では機能しません。

さて、私のサービスでは、 を に切り替えるwebHttpBindingbasicHttpBinding、電話アプリケーションが動作します。

ただし、使用するために WPF および ASP.NET アプリケーションを作り直す必要はありませんbasicHttpBinding

webHttpBindingWCF が複数のバインディングをサポートできることを理解しており、との両方のエンドポイントを公開するようにサービスを構成して実行しようとしましたbasicHttpBinding。サービスは正常に起動しているようです。ただし、WPF および ASP.NET アプリケーションはアクセスできません。WP7 アプリケーションでサービス参照を作成しようとすると、次のメッセージが表示されます。

バインド インスタンスは、リッスン URI 'http://localhost:1726/GeneralService.svc' に既に関連付けられています。2 つのエンドポイントが同じ ListenUri を共有する場合は、同じバインディング オブジェクト インスタンスも共有する必要があります。競合する 2 つのエンドポイントは、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>
4

4 に答える 4

8

address 属性に、そのアドレスを区別する basic または webhttp エンドポイントの値を指定するだけです。元:

<endpoint behaviorConfiguration="web" address="rest" binding="webHttpBinding" bindingConfiguration="general" contract="MyProject.Contracts.IGeneralService" /> 

あなたの問題を解決するはずです

于 2012-01-13T09:29:32.900 に答える
3

指定している最初のエンドポイントのエンドポイントを定義するときaddress=""、2 番目のエンドポイントには値がありません (したがって、このエンドポイントの場合でも、アドレスは となります"")

<endpoint address="" 
            binding="basicHttpBinding" 
            bindingConfiguration="generalBasic"
            contract="MyProject.Contracts.IGeneralService" />
        <endpoint behaviorConfiguration="web" 
            binding="webHttpBinding"
            bindingConfiguration="general" 
            contract="MyProject.Contracts.IGeneralService" />

その場合、アドレスを空として指定すると、デフォルトのベースアドレスが使用されます。

したがって、エンドポイントのいずれかに何らかの値を指定してみてください。したがって、これら 2 つのエンドポイントには異なるアドレスが割り当てられます。

<endpoint address="" 
            binding="basicHttpBinding" 
            bindingConfiguration="generalBasic"
            contract="MyProject.Contracts.IGeneralService" />
        <endpoint behaviorConfiguration="web" address="WP7Service" 
            binding="webHttpBinding"
            bindingConfiguration="general" 
            contract="MyProject.Contracts.IGeneralService" />

したがって、新しいエンドポイント アドレスは次のとおりです。

  1. http://localhost:1726/GeneralService.svc
  2. http://localhost:1726/GeneralService.svc/WP7Service
于 2012-08-31T03:22:38.433 に答える
0

WP でサービスを使用するには、Rest、Soap、または OData エンドポイントを使用してサービスを公開する必要があります。以下のリンクでは、そのような目的で WCF RIA を公開する方法が非常に明確に説明されてい
ます

于 2012-01-13T09:38:51.523 に答える