0

既存の Asp.Net プロジェクトは WCF WebService を使用していました。正常に動作しています。

ビジネス ロジックをクラス ライブラリに移動することにしました。そのため、クラス ライブラリは WCF Web サービスを使用し、Asp.net アプリはそれを参照しません。

Asp.net Web アプリ (デバッグ) によるクラス ライブラリへの最初の呼び出しで、エラーが発生します。

ServiceModel クライアント構成セクションで、契約 'CouponParking.ICouponService' を参照する既定のエンドポイント要素が見つかりませんでした。これは、アプリケーションの構成ファイルが見つからなかったか、このコントラクトに一致するエンドポイント要素がクライアント要素に見つからなかったためである可能性があります。

クラス ライブラリ app.config (WCF サービスへのサービス参照を最初に追加したときに IDE によって作成されたもの) をじっと見たところ、問題ないように見えます。

それを変更する必要があると仮定すると、誰かがそれに批判的な目を向けて、何をする必要があるか教えてください. エンドポイントに関する私の理解は初歩的です。

asp.net web.config には、空の servicemodel セクションがあります。サービス参照が削除されているため、これは正しいと思います。

クラス ライブラリの app.config は WCF の web.config に続くので、もう一方の端を見ることができます。

WCF は Android デバイスでも使用されるため、追加の JSON エンドポイントがあります。

App.Config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="SoapEndPoint" />
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:8707/CouponParking.svc/SOAP"
            binding="basicHttpBinding" bindingConfiguration="SoapEndPoint"
            contract="CouponParking.ICouponService" name="SoapEndPoint" />
    </client>
</system.serviceModel>
</configuration>

Web.Config:

<?xml version="1.0"?>
<configuration>

<configSections>
<sectionGroup name="applicationSettings"    type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxxxx" >
  <section name="CouponParkingWCF.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" />
  </basicHttpBinding>
  <webHttpBinding>
    <binding name="JsonBinding" />
  </webHttpBinding>
 </bindings>
 <services>
  <service name="CouponParkingWCF.CouponService">
    <endpoint name ="SoapEndPoint"
              address="SOAP"
              binding="basicHttpBinding"
              contract="CouponParkingWCF.ICouponService" />
    <endpoint name="JSON"
              address="REST" behaviorConfiguration="JsonBehavior" binding="webHttpBinding"
      contract="CouponParkingWCF.ICouponService" />
   </service>
  </services>
  <behaviors>
  <endpointBehaviors>
    <behavior name="JsonBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
  </behaviors>
  <protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
  </protocolMapping>    
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
    To browse web app root directory during debugging, set the value below to true.
    Set to false before deployment to avoid disclosing web app folder information.
  -->
<directoryBrowse enabled="true"/>
</system.webServer>

<applicationSettings>
<CouponParkingWCF.Properties.Settings>
  <setting name="ServerIp" serializeAs="String">
    <value>192.168.0.224</value>
  </setting>
  <setting name="Database" serializeAs="String">
    <value>WgtnTickTrakTest</value>
  </setting>
</CouponParkingWCF.Properties.Settings>
</applicationSettings>
</configuration>
4

1 に答える 1

2

クラス ライブラリは、使用するアプリケーションの構成ファイルを使用します。独自の構成ファイルは使用しません。system.serviceModelそのため、この部分をライブラリの app.congif から ASP.NET アプリケーションの web.config に移動する必要があります。

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="SoapEndPoint" />
    </basicHttpBinding>
  </bindings>
  <client>
    <endpoint address="http://localhost:8707/CouponParking.svc/SOAP"
              binding="basicHttpBinding" 
              bindingConfiguration="SoapEndPoint"
              contract="CouponParking.ICouponService" 
              name="SoapEndPoint" />
  </client>
</system.serviceModel>

これで、ASP.NET アプリケーションからクラス ライブラリを呼び出すと、バインディングとクライアント エンドポイントが取得されます。

于 2013-09-25T04:53:20.573 に答える