0

VisualStudio2008で開発された次の単純なWCFライブラリがあります。
このwcfサービスを呼び出すWCFTestClinet/javascript(SOAPを使用)を実行すると、次のシナリオでfalse値が返され
ます。1。GetNumber-> output:"あなたの番号は0 "
2.SetNumber->出力なし
3.GetNumber->出力:"出力の代わりにあなたの番号は0です:"あなたの番号は8です" !!!
なぜこれが起こっているのか、どうすれば解決できるのか、誰かが説明できますか?
ありがとう

public class Service1 : IService1
    {
        private int Number;

        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }

        public string GetNumber()
        {
            return string.Format("Your number is : {0}", Number);
        }

        public void SetNumber()
        {
            Number = 8;
        }
    }
4

5 に答える 5

5

インスタンスがすべてです。デフォルトでは、サービスの 1 つのインスタンスがセッションごとにインスタンス化されます。ただし、設定によっては (たとえば、 BasicHttpBinding を使用して)、サービスが呼び出しごとにインスタンス化される場合があります (および/またはセッションをまったくサポートしない場合もあります)。

于 2012-12-04T13:57:20.953 に答える
1

おそらく、セッションごとではなく呼び出しごとに WCF サービスを構成したためです。

違いを伝える素晴らしい答え: https://stackoverflow.com/a/2542991/70386

于 2012-12-04T13:58:08.207 に答える
0

これは、デフォルトでWCF3.5のインスタンスモードがであるためですPerCall。これは、WCFが受信するすべての呼び出しに対して、サービスクラスの新しいインスタンスを作成し、呼び出しを実行してから、そのインスタンスを破棄することを意味します。

値を共有したい場合は、次のようにサービスをシングルトンに構成できます。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class  Service1 : IService1
于 2012-12-04T14:00:50.453 に答える
0

私は SOAP WCF を使用したことはありませんが、他の Web サービスでの作業において、サービスが呼び出されるたびに新しいインスタンスが作成されることを理解しています。これは、新しいインスタンスであるため、SetNumber で行ったことが次の GetNumber には存在しないことを意味します。

必要に応じて、その値を静的にして、呼び出し間の変更を保持できます。

于 2012-12-04T13:58:24.760 に答える
0

これは同じインスタンスですか?それ以外の場合、 Number は常に 0 に設定されるため

于 2012-12-04T13:58:03.493 に答える