私が知る限り、デフォルトの WCF 構成オプションを使用して、WCF を使用して SQL Server 2008 SSRS Web サービス ( .../reportserver/ReportService2005.asmx?wsdl) をサブスクライブしています。
ただし、ローカル プロキシ クラスを生成するときに奇妙なことを行います。
例として ListChildren メソッドを使用します。
クライアント側では、予想どおり、WCF は次のようなインターフェイスを生成します。
public interface ReportingService2005Soap {
ListChildrenResponse ListChildren(ListChildrenRequest request);
}
また、そのインターフェースを実装する「クライアント」プロキシも生成します。
public partial class ReportingService2005SoapClient :
System.ServiceModel.ClientBase<ReportingService2005Soap>, ReportingService2005Soap
{
[EditorBrowsableAttribute(EditorBrowsableState.Advanced)]
ListChildrenResponse ReportingService2005Soap.ListChildren(ListChildrenRequest request)
{
return base.Channel.ListChildren(request);
}
public ServerInfoHeader ListChildren(string Item, bool Recursive, out CatalogItem[] CatalogItems) {
ListChildrenRequest inValue = new ListChildrenRequest();
inValue.Item = Item;
inValue.Recursive = Recursive;
ListChildrenResponse retVal = ((ReportingService2005Soap)(this)).ListChildren(inValue);
CatalogItems = retVal.CatalogItems;
return retVal.ServerInfoHeader;
}
}
ご覧のとおり、クライアント プロキシはインターフェイスを実装し、インターフェイスを明示的に実装することによって (インターフェイス メソッドにアクセスするにはキャストする必要があります)、さらに EditorBrowsableState.Advanced 属性を使用して、使用されないように「非表示」にします。
次に、「out」パラメーターを使用する追加のラッパー メソッドを追加します。
それをやめて、インターフェイスを直接実装する方法はありますか?
ここで行っていることは、'out' パラメーターを指定してラッパー メソッドを使用する方法へと導きます。その後、ラッパー メソッドは仮想ではなく、どのインターフェイスでも定義されていないため、サービスを簡単にモックできないことがわかります。 .
注意: ここでは例として SSRS Web サービスを使用していますが、WCF が他のサービスでもこれを行うのを見てきました。