2011-01-23 7 views

答えて

0

まず、インターフェイスをServiceContractとして定義し、カスタムコレクションをOperationContractとして返すメソッドを定義する必要があります。私はあなたにVB.netのコードを与える、バスはここでは、C#

Imports System.ServiceModel 
<ServiceContract()> 
Public Interface IClientContract 

    <OperationContract()> 
    Function GetClientList() As IList(Of POCOClients) 

End Interface 

にそれを翻訳することは非常に非常に簡単です、(POCOClientsの)のIListは、カスタムコレクションです。次に、インターフェイスを実装します。

Public Class ClientContractImplementation 
    Implements IClientContract 

    Private ClientOp As IClientsOperations 

    Sub New() 
'I use a IoC container here, but you can make a standar New() at this point' 
     ClientOp = BLIoC.Container.Resolve(Of IClientsOperations)() 
    End Sub 

    Public Function GetClientList() As System.Collections.Generic.IList(Of ServiceLayerContract.POCOClients) Implements ServiceLayerContract.IClientContract.GetClientList 

     Return ClientOp.SearchClients() 

    End Function 
End Class 

そして、あなたはService.ServiceModelセクションでは、WCFサービスを公開するためにはapp.configを設定する必要があります。

</endpoint> 
<endpoint address="mex" binding="mexHttpBinding" name="MEX" contract="IMetadataExchange"/> 
<host> 
    <baseAddresses> 
    <add baseAddress="http://localhost:81/Client"/> 
    </baseAddresses> 
</host> 

、クライアントがサービスにコールすると、IList(Of POCOClients)のカスタムコレクション(または必要なもの)が返されます。

0

クライアントでコア生成プロキシを使用しているのか、アセンブリ共有を使用している(サーバーとクライアントで同じコードを使用しているのか)に大きく依存します。プロキシを使用すると、単に:の公開状態を表す浅いオブジェクトではありません。あなたがmex/wsdlに持っているのは、コードジェーン層が(あなたの譲渡に応じて)List<T>ObservableCollection<T>などと解釈するタイプXの項目のセットです。

アセンブリ共有を使用している場合は、 はすでにには正しいタイプのクライアントがあるので、うまくいくはずですが、これは抽象化の面で純粋ではありません。パブリックAPIで回避するのが最適ですが、プラットフォームを共有する内部アプリではうまくいきます。

関連する問題