web-dev-qa-db-ja.com

WCFエラー:このファクトリでは手動アドレス指定が有効になっているため、送信されるすべてのメッセージは事前にアドレス指定する必要があります

カスタムファクトリを作成したホストされたWCFサービスがあるので、これは複数のHostヘッダーで機能します。

_/// <summary>
/// Required for hosting where multiple Host headers are present
/// </summary>
public class MultipleHostServiceFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        List<Uri> addresses = new List<Uri>();
        addresses.Add(baseAddresses[0]);
        return base.CreateServiceHost(serviceType, addresses.ToArray());
    }
}
_

クライアントとサーバーの両方で私の構成ファイルが正しいことを確信しています( ここで見ることができます )。

私が得ているエラーは、工場に関連しているようです:

このファクトリでは手動アドレス指定が有効になっているため、送信されるすべてのメッセージは事前にアドレス指定する必要があります。

_public string GetData(int value) {
    return base.Channel.GetData(value);
}
_

エラーはreturn base.Channel.GetData(value);行で発生します。

41
ElHaix

このエラーが発生し、WebHttpBehaviorを追加することで問題を解決しました(下の2行目)。

var factory = new ChannelFactory<IService>(new WebHttpBinding(), uri);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();
61
bendewey

通常どおりサービス参照を追加しましたが、このエラーが発生しました。私がしなければならなかったのは、webhttpを指定する動作でエンドポイント構成を使用するようにクライアント構成を修正することでした

<client>
  <endpoint address="http://localhost:9000/GeoConverterService/GeoConverterService.svc"
            binding="webHttpBinding" 
            contract="GeoConverter.IGeoConverterService" 
            behaviorConfiguration="webhttp"/>
</client>

<behaviors>
  <endpointBehaviors>
    <behavior name="webhttp">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
27
jason mardell

これでようやく終わりました!

ブライアン-これについてのご指導ありがとうございます。バインディングはクライアントとサーバーとの間に不整合があり、最終的には両方で次のようになりました:

  <basicHttpBinding>
    <binding name="TransportSecurity">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding> 

...エンドポイントバインディングおよびbindingConfiguration属性を適宜設定します。

   <endpoint binding="basicHttpBinding" 
             bindingConfiguration="TransportSecurity"
             contract="ServiceReference1.IService" 
             name="WebHttpBinding_IService" 
             address="https://mysslserver.com/Service.svc" />

これは私にとって比較的新しい芝なので、これらのエラーが発生した理由の説明だけで正しい方向に導かれます:)。

2
ElHaix

これは必ずしもあなたの工場と関係があるとは思わない。

見る

http://msdn.Microsoft.com/en-us/library/system.servicemodel.channels.transportbindingelement.manualaddressing.aspx

または、「手動アドレス指定」の最初の数回のBingヒットに含まれるその他のもの。使用されているバインディングは、スタック/メッセージングロジックの他の部分と互換性がないようです。

1
Brian