私はWCFサービスのプログラミングに非常に慣れていないので、私の質問に答える場合は、それを考慮に入れて、私が子供のように説明してくれることを願っています(ダミー向けのwcfサービス:)。接続する必要のある既存のWCFサービスがあります。既存のWCFサービスと通信し、既存のサービスで既に定義されているいくつかの要求オブジェクトと応答オブジェクトを共有する独自のWCFサービスを作成することになっています。誰かがそれを行う方法を教えてもらえますか(2つの間の通信を確立し、既存のものと同じタイプのオブジェクトを作成する必要があるサービスで使用します)、ステップバイステップで?私はオンラインで答えを見つけようとしましたが、それはすべて少し混乱しています(参照、契約の使用...)。私が言ったように、あなたはあなたが本当の初心者にそうするかのように自由に説明することができます。どんな助けでも大歓迎です...
1 に答える
「既存のWCFサービスと通信し、既存のサービスで既に定義されているいくつかの要求オブジェクトと応答オブジェクトを共有する独自のWCFサービスを作成することになっています。」-これは、サービスに接続するためのクライアントを作成する必要があるようです(以下のクライアントの作成方法を参照してください)。別のサービスと通信するためにWCFサービスを作成できますが、この形式で許可されているよりも少し多くのバックグラウンドが必要になります。
WCFの例を通じて、WCFに慣れることができます。例のWF_WCF_Samples\WCF \ Basicの下に、最初に実行する必要のある多くのサービス/クライアント設定があります。MSDN Magazineには、このトピックに関する多数の記事があります。
物事の10,000フィートのビューで:
クライアント-サービスを利用するには、テストコンソールアプリケーションを作成します。プロジェクトにサービス参照を追加します(参照を右クリックすると、そのオプションが表示されます)。[サービス参照]ダイアログのアドレスを使用したいサービスにポイントすると、多くのことが起こります。最終的な結果として、以下のような方法でサービスのサービスメソッドを呼び出すことができます(Service1は、呼び出しているサービスに置き換えられます)
static void Main(string[] args)
{
var proxy = new ServiceReference1.Service1Client();
var test = proxy.GetData(1);
}
サービス-メソッドとタイプを使用してインターフェースを作成し、このインターフェースを次のような属性で装飾します。
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
}
これらは、サービスが実行できる操作(OperationContract)です。サービスメソッドは、プリミティブ型または複合型(文字列とCompositeType)を返すだけでなく、複合型またはプリミティブ型のパラメーターを受け取ることもできます。
この契約を実装します。
public class Service1 : IService1
{
public string GetData(int value)
{
throw new ApplicationException("Boom");
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
次に、サービスをホストする必要があります。ホスティング要件に応じて、これを実現するための多くのオプションがあります。実行できる最も簡単なホスティングは、コンソールアプリケーションを使用することです。
class Program
{
static void Main(string[] args)
{
var host = new ServiceHost(typeof(Service1), new Uri("http://localhost:8999/"));
host.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "");
var metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (metadataBehavior == null)
{
metadataBehavior = new ServiceMetadataBehavior();
metadataBehavior.HttpGetEnabled = true;
host.Description.Behaviors.Add(metadataBehavior);
}
host.Open();
Console.WriteLine("Running..");
Console.ReadLine();
}
}