ASMX/Web Service 以 WSDL 描述,portType 中 Operation 以 name 屬性唯一識別。同名方法無法產生唯一 Operation Name,故不支援多載。
WCF 允許在 [OperationContract(Name="UniqueName")] 指定契約層面的唯一 Operation 名稱,實現 .NET 多載到 SOA 契約的映射。

[ServiceContract]
public interface ICalculator
{
[OperationContract(Name = "AddWithTwoOperands")] double Add(double x, double y);
[OperationContract(Name = "AddWithThreeOperands")] double Add(double x, double y, double z);
}
public class CalculatorService : ICalculator
{
public double Add(double x, double y) => x + y;
public double Add(double x, double y, double z) => x + y + z;
}
<endpoint binding="basicHttpBinding" contract="...ICalculator" />
<host><baseAddresses><add baseAddress="https://localhost:1234/calcuator" /></baseAddresses></host>
瀏覽 ?wsdl 可見 portType 包含兩個唯一 Operation:
<wsdl:operation name="AddWithTwoOperands">...</wsdl:operation>
<wsdl:operation name="AddWithThreeOperands">...</wsdl:operation>

「添加服務參考」產生的 Proxy 為扁平化方法名 (AddWithTwoOperands, AddWithThreeOperands)。為還原多載體驗:
[ServiceContract(Name = "ICalculator")]
public interface IMyCalculator
{
[OperationContract(Name = "AddWithTwoOperands")] double Add(double x, double y);
[OperationContract(Name = "AddWithThreeOperands")] double Add(double x, double y, double z);
}
public class MyCalculatorClient : ClientBase<IMyCalculator>, IMyCalculator
{
public double Add(double x, double y) => Channel.Add(x, y);
public double Add(double x, double y, double z) => Channel.Add(x, y, z);
}
<endpoint address="https://localhost:1234/calcuator"
binding="basicHttpBinding"
contract="...IMyCalculator" />
// 產生式 Proxy
using (var gen = new CalculatorClient())
{
gen.AddWithTwoOperands(1,2);
gen.AddWithThreeOperands(1,2,3);
}
// 重構多載 Proxy
using (var my = new MyCalculatorClient())
{
my.Add(1,2); // 多載!
my.Add(1,2,3); // 多載!
}

OperationContract.Name 打通 .NET 多載與 SOA 唯一 Operation Name 的鴻溝。本系列後續文章將探討:服務端 Contract 繼承 (Part I/II)、雙工通訊、例外處理、Session/Instance 管理 等 WCF 核心進階主題。