AppFabric を使用して自動起動されるサービスがあります。私がやりたいことは、自分のサービスの wsdl を bus 経由で公開することです。もちろん、内部的にサービスと wsdl は問題なく動作します。バス経由でサービスを問題なく使用することもできます。適切に構成できない唯一のことは、リレーを介して wsdl を表示することです。
はServiceHostFactory
、既定のエンドポイントを作成し、リレー経由で wsdl を公開することを期待して、mex エンドポイントと共に Azure エンドポイントも追加します。サービス バス URL から wsdl を表示しようとすると、おそらく ACS 認証の失敗が原因で、不一致エラーが発生しますか?
...cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree
ブラウザーに移動して wsdl を表示できるように、mex エンドポイントを匿名認証として設定する必要がありますか? 他に何を試すべきかわかりません...どんな助けもいただければ幸いです!
URL の例:
http://myservicebusexample.servicebus.windows.net/MyService/AService.svc?wsdl
また
http://myservicebusexample.servicebus.windows.net/MyService/AService.svc/mex
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
だからここに私のServiceHostFactory
// Create host with default endpoints
ServiceHost host = new ServiceHost(serviceType, baseAddresses);
host.AddDefaultEndpoints();
// Create Relay Endpoint for Azure
ServiceEndpoint relayEndpoint = host.AddServiceEndpoint(typeof(IMyContract), new BasicHttpRelayBinding("MyAzureBindingConfiguration"), relayAddress);
// Apply ACS Credentials for the relay endpoint
relayEndpoint.ApplyEndpointBehaviorConfig("MyAzureACSCredentials");
// Create mex Endpoint to expose wsdl over the relay
ServiceEndpoint mexEndpoint = host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
new BasicHttpRelayBinding("MyAzureBindingConfiguration"),
"mex");
// Apply ACS Credentials for the mex endpoint
mexEndpoint.ApplyEndpointBehaviorConfig("MyAzureACSCredentials");