0

従来の ASMX スタイルのサービスもホストする ASP.NET Web サイトでホストされる、新しく作成された WCF .SVC があります。

SVC に含まれている単一のメソッドを呼び出すと、次のメッセージが表示されます。

「メッセージを受け入れることができるリッスンしhttp://localhost/REDACTEDSITE/LicenseVerification.svcているエンドポイントがありませんでした。これは多くの場合、アドレスまたは SOAP アクションが正しくないことが原因です。詳細については、InnerException が存在する場合は参照してください。」

ただし、そのリンクをローカル マシンの任意のブラウザーに貼り付けて、「これは Windows© Communication Foundation サービスです。このサービスのメタデータ公開は現在無効になっています。」ページを取得できます。

IIS ログは、ブラウザーが GET 要求を発行し、200 応答を受信して​​いることを示しています。WCF クライアントは POST 要求を発行し、404.0 応答を受信して​​います。

これらは私が使用した最新の構成設定です。それらはやや最小限です。

ホスト

<system.serviceModel>
   <client entries for other services that work>

    <services>
      <service name="LicenseVerification.svc">
        <endpoint address="LicenseVerification.svc"
            binding="basicHttpBinding" bindingConfiguration="" contract="Management.ILicenseVerification" />
      </service>
    </services>

  </system.serviceModel>

クライアント

<system.serviceModel>
    <client>
      <endpoint address="http://localhost/REDACTEDSITE/LicenseVerification.svc"
          binding="basicHttpBinding" bindingConfiguration="" contract="Management.ILicenseVerification"
          name="LicenseVerificationClient">
      </endpoint>
    </client>
  </system.serviceModel>

契約する

 [ServiceContract]
    public interface ILicenseVerification
    {
        [WebInvoke(Method="GET")] //have tried WebGet()
        [OperationContract]
        LicenseInfo GetProfileLicenseInfo(string profileName);
    }

サービス実装

  public class LicenseVerification : ILicenseVerification
    {
        LicenseInfo ILicenseVerification.GetProfileLicenseInfo(string profileName)
        {
            ProfileInfo _pi = ProfileHelper.GetRequestedProfileInfo(profileName);
            if (_pi == null)
            {
                return null;
            }

            return LicenseVerifier.GetLicenseInfo(_pi);
        }
    }

asp.net 4.0 の再登録、サービス モデルの修復、IIS の再起動、MS サービス構成ユーティリティを使用して手動で構成ファイルの破棄と再作成を試みましたが、まだ機能しません。

これらは小さなリクエスト (数 KB) であるため、サイズの問題ではないと思います。

突き出ているのは GET/POST だけですが、私が作成した SVC ではこれまで問題はありませんでした。

私のローカル環境は Win7/64、VS2010、.NET 4 です。

他に試してみることを教えてください。私はさまざまなSOの投稿を同じように選別しましたが、運がありませんでした(露骨に異なって見えるものでさえ)。

4

2 に答える 2

1

<service>サーバーの構成内のエレメントの「name」プロパティーの値が正しくありません。.svc ファイルの名前ではなく、サービス クラスの完全修飾名(おそらく)をリストする必要があります。Management.LicenseVerification

さらにいくつかの問題:

  • あなたは[WebInvoke(Method = "GET")]あなたの操作で使用しています。[WebGet]GET 経由でアクセスする場合は、代わりに使用します
  • [WebInvoke] (および [WebGet]) は、 を使用しwebHttpBinding、エンドポイントの動作が であるエンドポイントに対してのみ受け入れられ<webHttp/>ますbasicHttpBinding
  • ブラウザーは GET 要求を送信していますが、操作を呼び出していません。おそらく、サービスのヘルプ ページを取得しています。したがって、ブラウザからは実際には「機能」していない可能性があります。
于 2012-05-29T21:53:21.323 に答える
0

carlosfigueira のアドバイスに従って [web*] 属性を削除し、構成でサービスの名前を修正した後、適切なサービス ヘルプ ページを取得できましたが、クライアントからはまだ機能していませんでした。

ただし、svcutil を使用して、サービスに必要なコードと構成を生成できるようになりました。生成された output.config ファイルからわかったのは、このようにエンドポイント アドレスが最後に重複しているということでした...

http://localhost/REDACTEDSITE/LicenseVerification.svc/LicenseVerification.svc

これは、サービスを利用するためにクライアントがヒットする必要があるエンドポイントです。そのエンドポイントをヒットするようにクライアントの構成を更新すると、うまくいきました!

これはまだ最適ではなかったので、サービス構成からアドレス要素を削除して、次のようになりました (sans behavior confg)。

  <service name="Management.LicenseVerification">
    <endpoint binding="basicHttpBinding" contract="Management.ILicenseVerification" />
  </service>

そして、それはまだ機能します!

asp.netでこれをホストすることの副作用以外に、なぜこれがアドレス要素を追加するのかについて、私は少し混乱しています。この場合、おそらくアドレス要素 (およびベースアドレス) を構成する必要はありませんか?

いずれにせよ、これは現在機能しています。

于 2012-05-30T13:12:57.217 に答える