46

これは複数のホスト ヘッダーで動作するように、カスタム ファクトリを作成したホストされた WCF サービスを持っています。

/// <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);

4

4 に答える 4

65

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

var factory = new ChannelFactory<IService>(new WebHttpBinding(), uri);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();
于 2010-04-28T14:29:51.423 に答える
30

いつものようにサービス参照を追加したところ、このエラーが発生しました。私がしなければならなかったのは、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>

于 2011-09-29T08:15:03.443 に答える
2

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

ブライアン-これについてのご指導に感謝します。バインディングがクライアントとサーバーでずれていたため、最終的に両方で次のようになりました。

  <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" />

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

于 2009-11-25T23:26:54.523 に答える
2

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

見る

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

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

于 2009-11-25T16:26:08.097 に答える