2

WCF サービスを作成しました。

共有.dll:

[ServiceContract(ConfigurationName = "ICalculator")]
public interface ICalculator
{
    [OperationContract()]
    int Add(int a, int b);
}

サーバ:

[ServiceBehavior()]
public class Calculator : ICalculator
{
    public int Add(int a, int b) { return a + b; }
}

クライアント (試行 #1):

public class CalculatorClient : ClientBase<ICalculator>, ICalculator
{
    private static Binding binding = new WSHttpBinding("MyConfig");
    private static EndpointAddress remoteAddress = new EndpointAddress(...);

    public CalculatorClient() : base(binding, remoteAddress) { }

    public int Add(int a, int b)
    {
        return Channel.Add(a, b); //Exception
    }
}

クライアント (試行 #2): -- 注: CalculatorClient を自分で作成する代わりに、サービス参照を追加しました (.NET が作成してくれました)。

static void Main(string[] args)
{
    Binding binding = new WSHttpBinding("MyConfig");
    EndpointAddress remoteAddress = new EndpointAddress(...);
    CalculatorClient client = new CalculatorClient(binding, remoteAddress);
    int result = client.Add(5, 4); //Exception
}

クライアント (試行 #3): -- 代わりに BasicHttpBinding() に変更しました

static void Main(string[] args)
{
    Binding binding = new BasicHttpBinding("MyConfig");
    EndpointAddress remoteAddress = new EndpointAddress(...);
    CalculatorClient client = new CalculatorClient(binding, remoteAddress);
    int result = client.Add(5, 4); //This works!
}

app.config:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="MyConfig" /> <!-- did not add anything to this yet -->
      </wsHttpBinding>
    </bindings>
</system.serviceModel>


私が得る例外は次のとおりです。Content Type application/soap+xml; charset=utf-8 はサービスhttp://localhost/CalculatorService.svcでサポートされていませんでした。クライアントとサービスのバインディングが一致していない可能性があります。サーバーとクライアント間で共有 dll ファイルを使用する場合に、それらがどのように不一致になるかわかりません。BasicHttpBindingうまくいきますが、そうWSHttpBindingではありません(私はWS2007HttpBinding.


例外: [ System.ServiceModel.ProtocolException] {"コンテンツ タイプ application/soap+xml; charset=utf-8 は、サービスhttp://localhost/CalculatorService.svcでサポートされていません。クライアントとサービスのバインディングが一致していない可能性があります。"} 内部例外: [ System.Net.WebException]リモート サーバーがエラーを返しました: (415) コンテンツ タイプが 'application/soap+xml; であるため、メッセージを処理できません。charset=utf-8' は予期されたタイプの 'text/xml ではありませんでした。charset=utf-8'..

4

1 に答える 1

2

WSHttpBindingで使用するセキュリティを設定する必要があります

http://msdn.microsoft.com/en-us/library/ms731884(v=VS.90).aspx

Sample Client/Server WSHttpBinding、デフォルト セキュリティで更新

クライアント


    class Program
    {
        static void Main(string[] args)
        {
          var calcClient = new CalcClient();
          int i = 1;
          int j = 2;
          Console.WriteLine("Result of Adding {0} and {1} is {2}", i, j, calcClient.Add(i, j));
          Console.ReadKey();
        }
    }

    public class CalcClient : ICalculator
    {
        public CalcClient()
        {
            CalcProxy = ChannelFactory.CreateChannel(new WSHttpBinding(), new EndpointAddress("http://localhost:5050/CalcServer"));
        }

        ICalculator CalcProxy { get; set; }

        public int Add(int a, int b)
        {
            return CalcProxy.Add(a, b);
        }
    }

サーバ


class Program
    {
        static void Main(string[] args)
        {
            var host = new ServiceHost(typeof (CalcSvr));
            host.AddServiceEndpoint(typeof (ICalculator), new WSHttpBinding(), "http://localhost:5050/CalcServer");
            host.Open();
            Console.WriteLine("Server Running");
            Console.ReadKey();
        }
    }
于 2011-03-14T19:10:25.190 に答える