私はWCFデュプレックスサービスの単体テストに取り組んでいます。以下は、サービス インターフェイスと callbackcontract インターフェイスを実装するコードの一部です。テストでは、ServiceHost.Open が EmailRequest メソッドを呼び出しているクライアントからの着信メッセージをリッスンします。テストアサーションを行うよりも、返信するために着信現在のコンテキストを保存する必要があります。私が抱えている問題は、さまざまな方法を試したテストで、着信メッセージの現在のコンテキストを保存してポストバックすることができないことです。NullRefrence では常に例外がスローされます。テスト内に OperationContext.Current を保存するにはどうすればよいですか?
[ServiceContract]
Name="Email",
CallbackContract=typeof(IEmailCallbackcontract),
SeeionMode=SessionMode.Allowed)]
public interface IEmail
{
[OperationContract(IsOneWay=true, Name="Message")]
Void EmailRequest(string request, int MssgID);
}
[ServiceContract(Name="EmaiCallbackcontract")]
public interface IEmailCallbackcontract
{
[OperationContract(IsOneWay=true, Name="ResMessage")]
void EmailResponse(string response);
}
[ServiceBehavior(InstanceConextMode=InstanceContextMode.Single)]
public class Email:IEmail
{
public void EmailRequest(string message, int MssgID)
{
IEmailCallbackcontract callbak=OperationContect.Current.GetCallbackChannel<IEmailCallbackcontract>();
Console.Write("Message Recieved");
callback.EmailResponse("I got the message");
}
}
私はNUnitテストをしています
[Test]
public void TestEmail()
{
//I create a servicehost based on binding information
Servicehost.Open();
OperationContext.Current.GetCallbackChannel<IEmailCallbackcontract>();
//I want to post message back using OperationContext but keep getting Nullrefrence error
//for some reason test wont save the Current context of incoming messages.
}