私はこれに数日間苦労しています。IIS で WCF サービスをホストしようとしているので、他の Web サイトはこのサービスが公開するデータにアクセスできます。コードを書くのはかなり簡単で、何を試してもうまくいかない設定です。
私が達成しようとしていること:
- http(s)://service.motors.coop で http と https の背後にあるサービスを用意します (まだ SSL 証明書はありません)。
- .net、PHP、iOS、Android などから呼び出すことができます (ただし、これは構成ベースではないと確信しています)。
- http://service.motors.coop/motorsservice.svc/ShowClientIpなどのブラウザ経由でアクセスしてメソッドをテストします。
http://service.motors.coop/motorsservice.svc/ShowClientIpにアクセスしようとすると、次のエラーが表示されます。
' http://service.motors.coop/MotorsService.svc/ShowClientIp 'を含むメッセージは、EndpointDispatcher での AddressFilter の不一致により、受信側で処理できません。送信者と受信者の EndpointAddresses が一致していることを確認してください。
数え切れないほどの記事を読んだり、本を購入したりしましたが、設定オプションが多すぎてどこから始めればよいかわかりません。複雑すぎます。
私の構成ファイルで私を助けてくれる親切な魂はありますか?
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<!-- removed -->
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<customErrors mode="Off"/>
<httpRuntime/>
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="MotorsWcfService.MotorsService">
<endpoint address="" binding="webHttpBinding" bindingConfiguration="" name="MotorsServiceEndpoint" contract="MotorsWcfService.IMotorsService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" httpsGetUrl="https://service.motors.coop/MotorsService"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="EndpointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false"/>
更新:ウィザードを使用して構成を作成した後、次のファイルが作成されました。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="WebHttpEndPoint" defaultOutgoingResponseFormat="Json" />
</webHttpEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding" />
</basicHttpBinding>
<webHttpBinding>
<binding name="WebHttpBinding" />
</webHttpBinding>
</bindings>
<services>
<service name="MotorsWcfService.MotorsService" behaviorConfiguration="MyServiceTypeBehaviors" >
<endpoint address="http://service.motors.coop" binding="webHttpBinding"
bindingConfiguration="WebHttpBinding" contract="MotorsWcfService.IMotorsService" />
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
</system.serviceModel>
ただし、まだこのエラーが発生します。
' http://service.motors.coop/MotorsService.svc/ShowClientIp 'を含むメッセージは、EndpointDispatcher での AddressFilter の不一致により、受信側で処理できません。送信者と受信者の EndpointAddresses が一致していることを確認してください。