0

Silverlight アプリケーションを使用して 1 か月以上になりますが、奇妙な問題に遭遇しました。IIS で実行されている WCF サービスがあり、URL からアクセスできます: https://xyztestname.com/service1.svc

これをビジュアル スタジオで使用することができ、ビジュアル スタジオからデプロイすると、WCF サービスから適切なコールバックを取得でき、すべて正常に動作します。パッケージ ファイルを IIS の Service1.svc と同じフォルダーに展開すると、WCF サービスが正しくヒットしません。

この問題の解決を手伝ってください :(! これが私の web.config ファイルです。

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
 http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off"/>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
 <binding name="BasicHttpEndpointBinding">
 <security mode="TransportCredentialOnly">
 <transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="InformationService.Service1">
<endpoint address="" binding="basicHttpBinding"     bindingConfiguration="BasicHttpEndpointBinding"
name="BasicHttpEndpoint" contract="InformationService.IService1">    
</endpoint>    
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
 <serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>

どこが間違っているのかわかりません。ただし、イントラネット経由でアクセスした場合は同じ仮想フォルダーが正常に機能しますが、インターネット経由でアクセスした場合は機能しません:(助けてください。

編集: クライアント構成を確認した後、Visual Studio が URL をイントラネット URL に自動的に解決することがわかりました。インターネット URL に戻すと、例外がスローされます。

URI 'https://xyztestname.com/Service1.svc' へのリクエストを試行中にエラーが発生しました。これは、適切なクロスドメイン ポリシーを設定せずにクロスドメイン方式でサービスにアクセスしようとしたか、SOAP サービスに不適切なポリシーが原因である可能性があります。クロスドメイン ポリシー ファイルを公開し、SOAP 関連の HTTP ヘッダーを送信できるようにするために、サービスの所有者に連絡する必要がある場合があります。このエラーは、InternalsVisibleToAttribute 属性を使用せずに Web サービス プロキシで内部型を使用した場合にも発生する可能性があります。詳細については、内部例外を参照してください。

ただし、クロスドメイン ファイルと clientaccesspolicy ファイルの両方を IIS のアプリケーションのルートにコピーしました。:( 助けてください。

4

1 に答える 1

0

アプリケーションをインターネットで使用できるようにするには、アプリケーションを特定の IP とポートにデプロイする必要があります。できると思います。

これを行うには、applicationhost.config ファイルを手動で編集する必要があります (bindingInformation '::' を編集)。

iisexpress を起動するには、管理者権限が必要です

1 – Bind your application to your public IP address

通常、IIS Express でアプリケーションを実行する場合、アプリケーションは http://localhost:[someport] でのみアクセスできます。別のマシンからアクセスするには、パブリック IP アドレスにもバインドする必要があります。D:\Users[YourName]\Documents\IISExpress\config\applicationhost.config を開き、サイトを見つけます。次のようなものが見つかります。

 <site name="YOUR PROJECT NAME HERE" id="2">
     <application path="/"> 
     <virtualDirectory path="/" physicalPath="YOUR PHYSICAL PATH HERE"
             <binding protocol="http" bindingInformation="*:58938:localhost" />
    </bindings>
</site> 

で、別の行を追加します。

   <binding protocol="http" bindingInformation="*:58938:192.168.1.42" /> 

(ただし、もちろん、IPとポート番号を使用して)

    2 - Allow incoming connections

Windows 7 を実行している場合、ほとんどすべての着信接続がロックされているため、アプリケーションへの着信接続を明確に許可する必要があります。まず、管理コマンド プロンプトを起動します。次に、これらのコマンドを実行して、192.168.1.42:58938 を使用している IP とポートに置き換えます。

netsh http add urlacl url=http://192.168.1.42:58938/ user=everyone

これは、この URL と通信しても問題ないことを http.sys に伝えるだけです。

netsh advfirewall ファイアウォールは、ルール名を追加する="IISExpressWeb" dir=in プロトコル=tcp localport=58938 profile=private remoteip=localsubnet action=allow

これにより、Windows ファイアウォールに規則が追加され、ローカル サブネット上のコンピューターのポート 58938 への受信接続が許可されます。

これで、Visual Studio で Ctrl-F5 を押して、別のコンピューターからサイトを参照できるようになりました。

于 2012-12-09T11:35:49.747 に答える