0

VS2008 と .NET 3.5 を使用しています。

これは私の場合です:

1) 外部サービス:

私は外部サービスを使用し (そのコードについての知識はありません。私にとってはブラック ボックスです)、いくつかの引数を取るそのメソッドを呼び出します。そのうちの 1 つは、私が書くべき WCF サービスのアドレスです (2) を参照)。呼び出しは次のようになります。

string Url = "http://public-ip:8072/Service.svc";
string content = extClient.Method1(Url, email, param1, param2...);

Method1 の本体のどこかで、2) から私のサービスを呼び出します。

2) 私のサービス:

public class Service : IService
{
    public const string ReplyAction = "http://public-ip:8072/Message_ReplyAction";
    public const string RequestAction = "http://public-ip:8072/Message_RequestAction";

    public Message SetData(Message requestXml)
    {
        // Do something
    }
}

Web.config:

<system.serviceModel>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://public-ip:8072/"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>
  <behaviors>
    <serviceBehaviors>
      <behavior name="Parus.ServiceBehavior">
        <serviceMetadata httpGetEnabled="true" httpGetUrl="http://local-ip:8072/Service.svc"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="Parus.ServiceBehavior" name="Parus.Service">
      <endpoint address="http://public-ip:8072/Service.svc" binding="basicHttpBinding" contract="Parus.IService">
      </endpoint>
      <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

私のサービスは、ローカルで使用すると機能しますが、世界に公開すると機能しません。つまり、1) の Method1 はまったく呼び出さないということです。私はさまざまなことを試しましたが、今のところ何も起こりません。ファイアウォールがオフの場合は機能しません。また、ファイアウォールのポート 8072 の例外が追加されている場合は機能しません。

Web.config ファイルで何か間違ったことをしたか、IIS でいくつかの設定が抜けていたと思います。Web.config ファイルの public-ip アドレスと local-ip アドレスに注意してください。多分私は彼らと間違えました。わからない。

4

1 に答える 1

0

サービスがローカルで機能するが、パブリックIPアドレスを介して機能しない場合、通常は次の2つのいずれかになります。

  • ファイアウォールがリクエストをブロックしています。ここで、あなたがポートを開いたと書いたことがわかります。telnetでテストしてみてください。ポートをブロックしているレイヤーがいくつかあり、1つしか開いていない可能性があります。
  • 構成。web.configでパブリックIPアドレスとプライベートIPアドレスの使用を組み合わせて、すべてをパブリックIPアドレスに設定してみてください。
于 2012-12-11T15:35:12.873 に答える