0

asmxサービスをwcfに簡単に変換する方法を知るためにGoogleを検索していたところ、人々が次のようなコードを書いているのを見ました

これは私の古い asmx サービスです

[WebService(Namespace="http://kennyw.com/sampleservices/")]
public class MyService : System.Web.Services.WebService
 { 
[WebMethod]
public string Hello(string name)
  { 
   return string.Format(“Hello {0}.”, name);

  }

}

wcfに変換

[ServiceContract(Namespace="http://kennyw.com/WCFservices/")]
[WebService(Namespace="http://kennyw.com/sampleservices/")]
public class MyService : System.Web.Services.WebService
 { 
[WebMethod]
[OperationContract]
public string Hello(string name)
   { 
    return string.Format(“Hello {0}.”, name);

   }

}

変換するときに見たのですが、人々はサービス契約インターフェイスを使用していません。wcfサービスを開発するとき、単一のサービスに対して1つのサービス契約インターフェイスを作成する必要があることを知っているため、どのように機能するか。サービス契約インターフェイスなしで wcf サービスを開発する方法についての議論を探しています。ありがとう

4

2 に答える 2

2

インターフェイスに対するプログラミングは、いくつかの理由で優れているためです。

  • たとえば、非常に重要な理由の 1 つは、簡単にモックまたはスタブできる (そして期待値を設定できる) 方法で単体テストで簡単に使用できることです。

    IYourInterfaceMethods スタブ = MockRepository.GenerateStub();

    IYourInterfaceMethods モック = MockRepository.GenerateMock();

あなたが大企業に所属していて、自分のためだけにコーディングしているのではなく、JIRA タスクを完了させるために、通常は他の人や大学のためにプログラミングする立場にあります。彼らが使用および再利用できる API を作成しています (したがって、会社のコストを削減できます)。この場合、サービスの実装を別のライブラリに配置し、呼び出し可能なインターフェイスのみを公開して、マスター ピースを再利用する必要があります。しかし、この場合何が起こるかというと、誰かがあなたのサービスを使い始めたとき (例えば、お金がかかる SMS を送信したり、複雑な計算の 5 分間の処理を実行したりすることができます)、彼はできる必要があります。単体テストが必要な場合は、モックまたはスタブします。したがって、コードはテスト可能である必要があり、インターフェイスを介して機能を公開することでそれを実現できます。

  • インターフェイスを別のライブラリに配置すると、API のユーザーは、使用するインターフェイスを含むこのライブラリのみを持つことができます。また、インターフェイスが安定している (頻繁に変更されない) 場合、コードを再コンパイルする必要はなく、アプリケーション (モバイル、Web など) を再デプロイする必要はほとんどありません。大企業では、新しいバージョンの展開は危険な場合があります。彼らは黄金の計画に固執するのが大好きです: それが壊れていない場合は修正しないでください. そして、あなたにとってのメリットは何ですか?好きなだけ具体的な実装で遊んだり、バグを修正したり、これを修正したり、リファクタリングしたり、削除したりできます...一般的に楽しんでください。ただし、誰も傷つけません:)…</p>

  • インターフェイスを使用する理由は他にもたくさんあります。プログラマーの安全性などです。しかし、上記が最も重要だと思います 2.

お役に立てば幸いです。

于 2014-04-10T23:04:19.270 に答える
2

上記は、web.config で正しいコントラクトの名前を指定しないと機能しません。

インターフェイスのないクラスが次の名前空間にある場合:

namespace Foo
{
    [ServiceContract(Namespace="http://kennyw.com/WCFservices/")]
    [WebService(Namespace="http://kennyw.com/sampleservices/")]
    public class MyService : System.Web.Services.WebService
    { 
        [WebMethod]
        [OperationContract]
        public string Hello(string name)
        { 
            return string.Format(“Hello {0}.”, name);

        }
    }
}

この場合、Web 構成サービスの構成は次のようになります。

<services>
    <service name="YourServiceName">
        <endpoint address="" behaviorConfiguration="httpBehavior" binding="webHttpBinding" contract="Foo.MyService"/>
    </service>
</services>
于 2014-04-09T21:31:29.763 に答える