2

空のWebアプリケーションを作成し、ajax対応のwcfサービスを追加しました。テンプレートによって提供されたものを使用している実際のsvc.csファイルを変更していません

namespace SP.WebWCF {
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ActivateCardV1 {
    // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
    // To create an operation that returns XML,
    //     add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    //     and include the following line in the operation body:
    //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    [OperationContract]
    public void DoWork() {
        // Add your operation implementation here
        return;
    }

    // Add more operations here and mark them with [OperationContract]
}

}

このように設定を少し更新しました

 <service name="SP.WebWCF.ActivateCardV1">
    <endpoint address="https://services.mydomain.com" behaviorConfiguration="SP.WebWCF.ActivateCardV1AspNetAjaxBehavior"
      binding="webHttpBinding" contract="SP.WebWCF.ActivateCardV1" listenUri="/" isSystemEndpoint="true" />
  </service>

ただし、サービスをヒットしようとするとエラーが発生します

サービス'SP.WebWCF.ActivateCardV1'には、アプリケーション(非インフラストラクチャ)エンドポイントがありません。これは、アプリケーションの構成ファイルが見つからなかったか、構成ファイルにサービス名に一致するサービス要素が見つからなかったか、サービス要素にエンドポイントが定義されていなかったことが原因である可能性があります。

何が間違っているのですか?

4

1 に答える 1

1

まず、サービス構成xmlを単純化して標準化します。

  1. wsHttpBindingを使用します。
  2. httpsの代わりにhttpを使用してください。
  3. ListenUriとisSystemEndpointを削除します
  4. 動作構成属性を削除します。
  5. 契約名をパスに追加します。

また(Namespace = "")、クラスのContractAttributeから削除します-それが何をするのかはわかりませんが、構成xmlのcontract属性で名前空間を指定しています。

構成を簡略化すると、次のようになります。

<service name="SP.WebWCF.ActivateCardV1">
    <endpoint address="http://services.mydomain.com/ActivateCardV1" binding="wsHttpBinding" contract="SP.WebWCF.ActivateCardV1"/>
</service>

それが機能する場合は、複雑さを追加して、何がそれを壊すのかを見つけることができます。それが機能しない場合は、トラブルシューティングが簡単になるはずです(IISログにエラーが書き込まれていますか?)。

于 2010-11-27T06:09:23.883 に答える