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'..