1

正常にコンパイルされ、正常に公開される WCF サービスを作成しました。WCF サービスをテストするための Web アプリを作成しました。最初にsvcutil.exeそれを使用すると、構成ファイルではなくソース ファイルが作成されました。そのため、サービスをサービス参照として追加しましたが、クライアント アプリを実行しようとするまでは問題ないように見えました。次のエラーが表示されました。

Could not find default endpoint element that 
references contract 'ServiceReference1.IService1' in the ServiceModel 
client configuration section. This might be because no configuration 
file was found for your application, or because no endpoint 
element matching this contract could be found in the client element.

web.config ファイルに何か問題があると考え、投稿を検索すると、サービス モデル セクションをサービス構成ファイルからクライアント テスト Web 構成ファイルにコピーする必要があることがわかりました。これは役に立ちませんでした。

WCF サービス構成ファイル

<configuration>

<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<bindings>
  <webHttpBinding>
    <binding name="webHttpBinding" crossDomainScriptAccessEnabled="true" />
  </webHttpBinding>
</bindings>
<behaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="webHttpBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
 </behaviors>
  <services>
  <service behaviorConfiguration="webHttpBehavior" name="WcfInstanceRules2.Service1">
    <endpoint address="mex" 
     binding="webHttpBinding" bindingConfiguration="webHttpBinding"      

    contract="WcfInstanceRules2.IService1" behaviorConfiguration="web"/>
  </service>
 </services>
 </system.serviceModel>
 <system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

WebApp テスト構成ファイル

    <configuration>
    <connectionStrings>
    <add name="ApplicationServices"
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
    </connectionStrings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>
    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>
    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
      </providers>
    </profile>
     <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>
    </system.web>
    <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
    <system.serviceModel>
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
     <bindings>
      <webHttpBinding>
        <binding name="webHttpBinding" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="webHttpBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      </behaviors>
       <services>
       <service behaviorConfiguration="webHttpBehavior" name="WcfInstanceRules2.Service1">
        <endpoint address="mex" binding="webHttpBinding"   
     bindingConfiguration="webHttpBinding" 
     contract="WcfInstanceRules2.IService1" behaviorConfiguration="webHttpBehavior"/>
      </service>
     </services>
     </system.serviceModel>
    </configuration>
4

2 に答える 2

1

クライアント側で定義されたクライアント エンドポイントを使用する必要があります。現在、Web アプリで新しいサービス ホストを定義しています。クライアント側では、次のようなものが必要です...

<system.serviceModel>
  <client>
     <endpoint address="http://.../mex" binding="webHttpBinding"   
 bindingConfiguration="webHttpBinding" 
 contract="ServiceReference1.IService1" behaviorConfiguration="webHttpBehavior"/>
  </client>
</system.serviceModel>

これを簡単にするために、Add Service Referenceを使用すると、VS.NET によってこのクライアント エンドポイントが追加されます。

于 2012-08-10T19:08:57.630 に答える
0

エンドポイント タグで、contract="ServiceReference1.IService1" を変更します。

ServiceReference1 は、プロジェクトに追加するサービス参照です。

于 2014-05-14T11:38:13.813 に答える