2012-04-23 11 views
63

が、これはC#で許可されているServiceContractWCFでメソッドオーバーロードが許可されないのはなぜですか?

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

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

} 

メソッドのオーバーロードがあると仮定しますが、WCFは、ホスティングプログラムはInvalidOperationException一言で言えば

+10

私はこれが_correct_答えであるとは思わないので、コメントとして投稿します。 WCFは可能な限り多くのプロトコル、つまりマイクロソフト以外のテクノロジでも動作するように設計されているからです。オーバーロードは.Netと他のいくつかの言語の機能ですが、すべてではありません。サービスの可用性を最大限にするために、オーバーロードは許可されません。 (私は思う) – Smudge202

+0

私には良い答えのようです。 –

+0

@Sleiman nice remark slimy –

答えて

90

をホストしている間、スローされますあなたがoperation contracts をオーバーロードすることはできません。なぜなら、メソッドをオーバーロードできない理由は、WSDLがC#の内部にある同じオーバーロードコンセプトをサポートしていないという事実と関係しています。次の記事では、これがなぜ不可能であるかについて詳しく説明しています。

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

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

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

    [OperationContract(Name="SumUsingDouble")] 
    int Sum(double x, double y); 
} 
26

HTTP/SOAPを介して呼び出す場合ので、ご契約に同じメソッド名を持つことは、クライアントが起動しようとしている特定のどの方法を決定する方法がないことを意味します。

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

関連する問題