1

コンソール アプリケーションでホストされている WCF サービスがあります。コードは次のとおりです。

public interface ITestService
{
    [OperationContract]
    void SetField(string data);

    [OperationContract]
    string GetField();
}

public class TestService : ITestService
{
    private string myData;
    public string GetField()
    {
        retrun myData;
    }
    public void SetField(string data)
    {
        myData = data;
    }
}

次に、コンソール アプリケーションでホストしました。

ServiceHost host = new ServiceHost(typeof(TestService));

host.Open();            

Console.WriteLine("Test Service Host");
Console.WriteLine("Service Started!");

foreach (Uri address in host.BaseAddresses)
{
    Console.WriteLine("Listening on " + address);
}

Console.WriteLine("Press any key to close the host...");
Console.ReadLine();

host.Close();

コンソール ホストを起動し、他のコンソール アプリでサービスを参照して使用しました。

TestService client = new TestService();
client.SetField("test");
Console.WriteLine( client.GetField() );

この print nothing は、フィールドがまだnullであることを意味します

このサービスの何が問題になっていますか?

4

3 に答える 3

1

サービス クラスを次の属性でマークする必要があります。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]    
public class TestService : ITestService 
{ 
   //... 
}

これは、サービスのインスタンスが 1 つだけである必要があることを意味します。そして、次のようにホストを作成する必要があります。

var host = new ServiceHost(new TestService()); // or get a singleton..
host.Open();

タイプの代わりにインスタンスを使用してサービスを作成することに注意してください。その後、コードが機能するはずです。

于 2013-09-11T09:36:12.180 に答える
1

これを試して:

文字列を静的として使用します。

public interface ITestService
{
   [OperationContract]
   void SetField(string data);

   [OperationContract]
   string GetField();
}

public class TestService : ITestService
{
  private static string myData;
  public string GetField()
  {
    retrun myData;
  }
  public void SetField(string data)
  {
     myData = data;
  }
}
于 2013-09-11T09:13:47.780 に答える