別の質問に答えると、WCFが異なる数のメンバーと、通常の.netランタイムではできない異なる名前空間からのインターフェイスをキャストできて、この面白い状況に遭遇しました。興味深いWCFインターフェイスのキャスティング動作
どのようにしてWCFがそれを行うことができるか、WCFが通常の.netランタイムと同じように動作するように設定/強制する方法について説明できます。私は1つのインターフェイスだけを持っている必要があります知っていることに注意してくださいと
using System;
using System.Runtime.Serialization;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
namespace MyClient
{
[ServiceContract]
public interface IService
{
[OperationContract]
string Method(string dd);
[OperationContract]
string Method2(string dd);
}
}
namespace MyServer
{
[ServiceContract]
public interface IService
{
[OperationContract]
string Method(string dd);
}
}
namespace MySpace
{
public class Service : MyServer.IService
{
public string Method(string dd)
{
dd = dd + " String from Server.";
return dd;
}
}
class Program
{
static void Main(string[] args)
{
string Url = "http://localhost:8000/";
Binding binding = new BasicHttpBinding();
ServiceHost host = new ServiceHost(typeof(Service));
host.AddServiceEndpoint(typeof(MyServer.IService), binding, Url);
host.AddDefaultEndpoints();
host.Open();
// Following line gives error as it should do.
//MyClient.IService iservice = (MyClient.IService)new MySpace.Service();
// but WCF is happy to do it ;)
ChannelFactory<MyClient.IService> fac = new ChannelFactory<MyClient.IService>(binding);
fac.Open();
MyClient.IService proxy = fac.CreateChannel(new EndpointAddress(Url));
string d = proxy.Method("String from client.");
fac.Close();
host.Close();
Console.WriteLine("Result after calling \n " + d);
Console.ReadLine();
}
}
}
が
Chrisは説明することができます "//サービスは、契約 //が定義されたサービス契約と一致するすべてのWCFクライアントプロキシによって消費される可能性があります(つまり、要求と応答メッセージで同じXMLインフォセット // )。 " –
契約がどのようにマッチングしているのか、なぜその理由が異なるのですか? –
私は "契約が定義された**運用**契約に一致する"と言ったはずです。サーバースタックは、クライアントスタックが要求メッセージをどのように構築したかについて何も知らないため、クライアントがクライアント側のチャネルランタイムを構築するための特別なメソッドを含むインターフェイスを使用していることは分かりません。すべてのサービスは、サービス契約のもとで有効な操作「メソッド」の要求インフォセットであるため、喜んで応答します。 –