0

私はWCFの世界で非常に新しいです。コードをダウンロードして wcf サービスの構成ファイルを見たのですが、知識が不足しているため、WCF サービスの構成ファイルのエントリに関して頭の中で混乱が生じています。

ここに私の質問があります

1)<service name="WCFService.Service" サービス名が必要な場合 サービス名を省略できますか。省略できる場合、どのような問題が発生する可能性がありますか?

2) abc.xyz のような任意の名前をサービス名に設定できますか、またはサービス名を割り当てるためのルールはありますか?

3) ベースアドレスの用途は何ですか? ベースアドレスを省略すると、何が問題になる可能性がありますか。ベース アドレスが必要な場合、以下の構成エントリによると、2 つのベース アドレスがあります...なぜ 2 つのベース アドレスが必要なのか。人々がより多くのベースアドレスを与えるとき? 以下の 2 つのベース アドレスを見て、人々が 2 つのベース アドレスを指定する理由を教えてください。

4) 2 つのエンドポイントがあり、1 つは tcp で、もう 1 つは mex です。mex ベースアドレスを省略すると、サービスが検出されなくなりますか? はいの場合、VS IDE または svcutil から誰もプロキシを作成できないことを意味します....私は正しいです。

5) mex エンドポイントが削除される場合、サービスと対話する方法....他の方法が必要です。もしそうなら、クライアントエンドとしてサービスとやり取りする方法を教えてください。

6)

上記の mex エンドポイントを見て、mex エンドポイントの URL を次のように記述できるか教えてください。

**net.tcp://localhost:1645/MyServer/mex** instead of ChatServer ??

実際には、ChatServer という名前の win フォーム プロジェクトでホストされている wcf サービスです。これが、url がnet.tcp://localhost:1645/ChatServer/mex になる理由ですか?

私は何度も人々がmexエンドポイントを書いているのを見てきましたが、ここではmexエンドポイントのアドレスタグにURLが割り当てられていません....なぜですか? 上記のようにmexエンドポイントを書く必要がある場合...例を挙げて説明してください。

7) /mex.... の意味は何ですか? net.tcp://localhost:1645/ChatServer/mex /mex は必須で、mex は固定語ですか?

8) tcp エンドポイントが表示されるようになりました

tcp エンドポイント アドレスには URL がなく、tcp という単語がアドレス プロパティに割り当てられています...なぜですか?

TCPエンドポイントのアドレスフィールドに有効なURLを割り当てることはできませんか??

9) tcp エンドポイントのアドレス フィールドには、規則または慣習により、常に「tcp」と呼ばれる固定語が含まれます。

10) wsdualhttp バインディングと呼ばれる別のエンドポイントを追加する必要がある場合は、構成ファイルに何を書き込む必要があるか

11) IIS でホストされるサービスを開発しているが、クライアントが別の asp.net Web アプリであり、アプリを獲得できる場合、彼/彼女は何をする必要があるとしますか? 次に、VS ide からプロキシを作成するためにクライアントが使用する URL は何ですか? 誰でもサンプル構成エントリを入手できますか。

12) 人々が 2 つの URL を使用して私のサービスのプロキシを作成できるようにしたい場合の構成ファイルの書き方.... /localhost:1645/ChatServer/message.svc

私の質問が非常に基本的なものであることはわかっていますが、それでもこれらの質問を並べ替えることができません。また、構成ファイルのエントリを大胆に作成するための強力な知識を得る方法を教えてください。

私のサービスの正しい構成エントリを作成するツールはありますか....開発者に代わってそれを行う自動化されたアプリはありますか。ありがとう

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="WCFService.Service" behaviorConfiguration="behaviorConfig">

<host>
  <baseAddresses>
    <add baseAddress="net.tcp://localhost:1645/ChatServer/"/>
    <add baseAddress="http://localhost:1648/ChatServer/"/>
  </baseAddresses>
  </host>
  <endpoint address="tcp"
                  binding="netTcpBinding"
                  bindingConfiguration="tcpBinding"
                  contract="ChatService.IChat"/>

 <endpoint address="net.tcp://localhost:1645/ChatServer/mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange"/>

 </service>
 </services>

 <behaviors>
 <serviceBehaviors>
 <behavior name="behaviorConfig">
  <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
  <serviceDebug includeExceptionDetailInFaults="true"/>
  <serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="100"/>
 </behavior>
 </serviceBehaviors>
 </behaviors>
 <bindings>
 <netTcpBinding>
 <binding name="tcpBinding"
                 maxBufferSize="67108864"
                 maxReceivedMessageSize="67108864"
                 maxBufferPoolSize="67108864"
                 transferMode="Buffered"
                 closeTimeout="00:00:10"
                 openTimeout="00:00:10"
                 receiveTimeout="00:20:00"
                 sendTimeout="00:01:00"
                 maxConnections="100">
  <security mode="None">
  </security>
  <readerQuotas maxArrayLength="67108864"
                          maxBytesPerRead="67108864"
                          maxStringContentLength="67108864"/>
  <reliableSession enabled="true" inactivityTimeout="00:20:00"/>
  </binding>
  </netTcpBinding>
  </bindings>
  </system.serviceModel>
  </configuration>

MY 編集部分 ここから開始

3)あなたが話している共通部分は何ですか。私の完全な構成ファイルで見た共通部分は何ですか...例を挙げて説明してください。

とおっしゃっていました....ベースアドレスを省略した場合、毎回共通部分を複数回指定する必要があります。複数のトランスポート プロトコルに対してエンドポイントが指定されている場合は、複数のベース アドレスが必要です。

ポイント3のあなたの答えを読んだ後、私には明確ではないものがあるため、ベースアドレスを省略するためにあなたが言ったことを例で理解してもらえますか

4) mex エンドポイントを無効にした場合、svcutil で wsdl を作成するにはどうすればよいですか? サービス dll を渡すと、クライアントはコードをデコードし、完全なソース コードを取得できます。

12) サービスを利用するための 2 つの URL を公開すると、asp.net クライアントはnet.tcp://localhost:1645/ChatServer/mexのような tcp URL を使用してサービス プロキシを作成できます?? TCPバインディングを使用するためのWebクライアントに問題はありますか。tcp は完全な状態ですが、web はステートレスなので、tcp バインディング url net.tcp://localhost:1645/ChatServer/mexを使用するための web クライアントに問題があるかどうかを尋ねているのはそのためです。

13) 私の例では、mex エンドポイントは次のようになります

しかし、多くの人が次のような mex エンドポイントを作成します

2つのmexエンドポイントの違いを教えてください....また、いつ1ts mexエンドポイントに行くべきか、いつ人々が2番目のmexエンドポイントに行くべきか教えてください

14) 私の場合、 mex end のように書くとしたら

およびtcpエンドポイントのような

では、結果はどうなるでしょう。私のサービスは発見可能かどうか。その場合、サービスプロキシを作成するためにどのアドレスを使用する必要がありますか。

私はWCFに非常に慣れていないので、可能であれば、簡単に理解できるようにミニサンプルで私の質問に答えてください....ありがとう

4

1 に答える 1

0

あなたの答え一つ一つ

  1. サービス名は常に必要です。構成ファイルで省略した場合、不正な構成ファイルに関連するランタイム エラーが発生します (無効なサービス名を示すエラーが発生します)。コードから省略すると、コンパイル時エラーが発生します。

  2. いいえ。サービス名は、サービスを実装しているタイプに対応している必要があります (名前空間とともに)。詳細については、この回答を確認してください。

  3. 複数のエンドポイント (サービス エンドポイントや mex エンドポイントなど) が定義されている場合、いくつかの共通部分を使用して、共通部分をベース アドレス タグで指定できます。その場合、エンドポイント アドレス属性には差分部分のみが必要です (通常、サービス エンドポイントの場合は ""、mex エンドポイントの場合は "mex")。ベース アドレスを省略した場合は、共通部分を毎回複数指定する必要があります。エンドポイントが複数のトランスポート プロトコルに対して指定されている場合 (つまり、http と net.tcp で異なるベース アドレス)、複数のベース アドレスが必要です。ベースアドレスありとなしの
    例を次に示します。
    共通部分は「net.tcp://localhost:1645/ChatServer」

  4. mex エンドポイントを省略した場合は、コントラクト情報をオフラインでクライアントに提供する必要があります。あなたが言及したように、サービスは発見できません。したがって、何らかの方法でサービス/データ コントラクト情報 (WSDL/ライブラリ/ソース ファイル) をクライアント アプリケーションに提供する必要があります。クライアントを作成するために必要なのは、コントラクトと構成だけです。mex が利用可能な場合、この情報は mex エンドポイントから収集されます。mex が利用できない場合は、この情報をオフラインで利用できるようにする必要があります。例 (コントラクト ライブラリと構成をメールで送信)。

  5. 解決策は、契約情報をオフラインで提供することです (手順 4 で説明したように)。

  6. はい。ただし、あいまいさを避けるためにお勧めしません。

  7. いいえ、「mex」は固定されていません。URL が有効である限り、何でもかまいません。「mex」は、言われていないプロトコル/標準です。

  8. エンドポイント アドレス = baseAddress + アドレス属性。
    この場合、(tcp エンドポイントの) アドレス = "net.tcp://localhost:1645/ChatServer/" + "tcp"

  9. それは慣習ではありません。(URL が有効である限り) どんなものでもかまいません。

  10. wsdualhttpbinding構成のリンクを参照してください。ただし、トランスポート プロトコルは http であるため、完全なアドレスを指定する必要があります。baseAddress は取得されません。これは、プロトコル マッピングによるものです。

  11. クライアント アプリ (ASP.NET/console/win app/WPF/ その他) は、WCF クライアント構成と proxyを追加する必要があります。

  12. クライアントがどの URL を使用するかを決定するのは、クライアント次第です (アクセス権があり、認識している場合)。サーバー側で実行したい場合は、ルーティング サービス機能 (WCF 4.0 以降で利用可能) を使用できます。Web クライアントが tcp クライアントをどのように使用するのかわかりません (セキュリティ ポリシーで許可されていますか?)。いずれにせよ、サーバー側から 2 つのエンドポイントを公開しても、クライアントがエンドポイントにアクセスする方法に問題はありません。

フォーマットの問題により、13/14 のコード スニペットが表示されません。

于 2012-12-27T17:29:09.393 に答える