web-dev-qa-db-ja.com

メソッドのオーバーロードがWCFで許可されないのはなぜですか?

これがServiceContractであると仮定します

[ServiceContract]
public interface MyService
{
    [OperationContract]
    int Sum(int x, int y);

    [OperationContract]
    int Sum(double x, double y);

}

C#ではメソッドのオーバーロードが許可されていますが、WCFではoperation contractsホスティングプログラムは、ホスティング中にInvalidOperationExceptionをスローします

69
Sleiman Jneidi

簡単に言えば、メソッドをオーバーロードできない理由は、WSDLがC#内に存在する同じオーバーロードの概念をサポートしていないという事実に関係しています。次の投稿では、これが不可能な理由について詳しく説明します。

http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx

この問題を回避するには、NameOperationContractプロパティを明示的に指定できます。

[ServiceContract]
public interface MyService
{
    [OperationContract(Name="SumUsingInt")]
    int Sum(int x, int y);

    [OperationContract(Name="SumUsingDouble")]
    int Sum(double x, double y);
}
97
David Z.

HTTP/SOAPを介して起動する場合、コントラクト内の同じメソッド名を使用すると、クライアントが起動しようとしている特定のメソッドを判別する方法がないためです。

Httpを介してWebメソッドを呼び出す場合、引数はオプションであり、欠落している場合はデフォルト値で初期化されることに注意してください。これは、両方のメソッドの呼び出しがHTTP/SOAP上でまったく同じように見えることを意味します。

28
Wiktor Zychla