建議定義在 介面 上 (支援繼承、多契約實作、修改實作不影響契約)。標註 [ServiceContract],操作標註 [OperationContract]。
[ServiceContract(Name="Service_Calculator", Namespace="Henllyee")]
public interface ICalculator {
[OperationContract] int Add(int x, int y);
}
Name:契約/操作別名,避免名稱衝突Namespace:WSDL 目標命名空間WSDL 不支援 CLR 風格多載 (同名不同參數)。直接定義同名操作會編譯失敗。解法:用 OperationContract(Name="...") 指定唯一別名。
[ServiceContract(Name="Service_Calculator", Namespace="Henllyee")]
public interface ICalculator {
[OperationContract(Name="IntAdd")] int Add(int x, int y);
[OperationContract(Name="DoubleAdd")] double Add(double x, double y);
}
<system.serviceModel>
<services>
<service name="Service.Calculator" behaviorConfiguration="mex">
<host><baseAddresses><add baseAddress="https://localhost:8888"/></baseAddresses></host>
<endpoint address="Calculator" binding="basicHttpBinding" contract="Service.ICalculator"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="mex"><serviceMetadata httpGetEnabled="true"/></behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
啟動宿主,瀏覽 https://localhost:8888/?wsdl,WSDL 中操作名已對應別名 (IntAdd/DoubleAdd)。