2

私は WCF を試していて、サーバーに DataContract を追加し、ServiceContract を更新しました。ServiceReference が最初にクライアントに追加されたとき、両方を同じ PC で実行していたので、localhost を使用しました。私は今、イーサネットケーブルを介して2台のPCを接続し、その方法でサービス参照を更新しようとしました。LAN上のサーバーのIPアドレスをに設定しました192.168.10.10。次のコードは、サーバー フォームでボタンがクリックされたときに実行されます。

private void btnCommenceService_Click(object sender, EventArgs e)
    {
        host = new ServiceHost((typeof(Service)), new Uri[] { new Uri("http://localhost:9000")});   
        host.AddServiceEndpoint(typeof(IServices),
            new WSDualHttpBinding(),
            "ServerService");

        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        host.Description.Behaviors.Add(smb);

        host.Open();
        txtStatus.Text = "Service is open.";
    }

両方の PC でファイアウォールをオフにし"http://192.168.10.10"、クライアント PC からアドレスを正常に ping しました。ブラウザに入力すると、ランダムなWebページにもアクセスできました。

クライアントで、ソリューションをクリックして「サービス参照の追加」を選択し、入力すると

"http://192.168.10.10" "http://192.168.10.10:9000" "http://192.168.10.10:9000/ServerService"

それらはすべて何らかの形式のエラーで返されます。通常は次の行に沿ったものです。

The document at the url http://192.168.10.10:9000/ was not recognised as a known document type.
The error message for each known type may help u fix the problem:
-Report from 'XML Schema' is The document format is not recognised(the content type is 'text/html;charset=utf-8').'.
Report from DISCO Document is There was an error downloading `'http://localhost:9000/?disco'.'.` 
Unable to connect to the remote server. 
No connection could be made because the target machine actively refused it 127.0.0.1:9000
etc

アドレスにアクセスしてpingを実行できるのに、LAN経由で機能しない理由について誰かが指摘していますか?

4

3 に答える 3

1

イーサネット経由で 2 台の PC を直接接続しました。クロスケーブルを使用していませんか?2 台の PC は同じサブネット マスクにありますか? 例: 255.255.255.0?

于 2013-05-13T15:01:33.490 に答える
0

ようやく機能しましたが、サーバープロジェクト全体をもう一度再起動することにしました。私が異なる方法で行ったことをすべて以下にリストしました。それらのいくつかは問題だった可能性があり、他のものはそうでなかった可能性があります.

  1. すべてに winforms プログラムを使用しようとするのではなく、wcf サービス ライブラリを作成しました。Service ライブラリが完成したら、それを winforms アプリケーションで参照し、app.config にあったコードを winforms app.config にコピーしました。

  2. クライアントからそのエンドポイントに接続するには、両方を追加する必要があるため、ベースアドレスとエンドポイントアドレスに特に注意してください。

  3. User1467261 が述べたように、両方の方法で ping できることを確認しました。コントロール パネル -> .. -> ネットワーク接続で LAN -> プロパティ -> ipv4 オプションを選択し、両方の PC で一意の IP アドレスを指定する必要がありました。(多くの人はすでにこれを知っていると思いますが、私はこれを行う方法を知りませんでした。)

  4. Feras Salim が述べたように、他のコンピューターと同じユーザー名とパスワードでラップトップに新しいユーザーを作成したので、両方のセキュリティ設定をデフォルトのままにしました。

  5. クライアント側では、サービス参照の追加を使用しました。mexエンドポイントが何に使用されているのかよくわかりませんが、ベースアドレスに接続しただけで、app.configファイルのクライアント側が更新されました。サービス参照を追加するときに指定した名前空間の using ステートメントを忘れずに含めてください。

  6. サーバー側では、カスタム クラスのフィールドではなくプロパティを使用することを忘れないでください。

Feras Salim さん、User1467261 さん、ご協力ありがとうございます。

于 2013-05-15T08:02:08.737 に答える