12

このチュートリアルに従って、WCFサンプルをIISに展開しようとしています。動作させることができません。これはホストされたサイトですが、IISマネージャーからサーバーにアクセスできます。ただし、チュートリアルのステップ2では、「このアプリケーションディレクトリに物理的に配置された新しいIISアプリケーションを作成する」ことはできません。メニュー項目、コンテキストメニュー項目、または新しいアプリケーションを作成しないものが見つからないようです。私はどこでも狂ったように右クリックしてきましたが、それでも新しいアプリを作成する方法を理解できません。それがおそらく根本的な問題だと思いますが、実際には問題ではない場合に備えて、他のいくつかのこと(以下で説明)を試しました。これは、私の言葉が正義を果たさない場合に備えて、IISマネージャーに表示されるものの写真です。

ここにアプリケーションを追加しないhttp://www.freeimagehosting.net/uploads/d6edbaaf3c.png

これはhttp://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svcで「デプロイ」されています。エラーは次のように述べています。

    The type 'Microsoft.ServiceModel.Samples.CalculatorService', 
provided as the Service attribute value in the ServiceHost directive, 
or provided in the configuration element
 system.serviceModel/serviceHostingEnvironment/serviceActivations 
could not be found.

また、IISHostedCalcServiceを指す仮想ディレクトリ(IISHostedCalc)をdotnetpanelに作成しようとしました。http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svcに移動すると、別のエラーが発生します。

This collection already contains an address with scheme http.  
There can be at most one address per scheme in this collection.

興味深いことに、[アプリケーションの表示]をクリックすると、仮想ディレクトリはアプリケーションのように見えます(下の画像を参照)...ただし、上記のエラーメッセージに従って、機能しません。

これはアプリですか?http://www.freeimagehosting.net/uploads/f3230be046.png

チュートリアルによると、コンパイルは含まれていませんでした。IISHostedCalcServiceフォルダー内で次のようにサーバーにファイルをドロップしました。

service.svc
Web.config
<dir: App_Code>
   Service.cs

service.svcに含まれるもの:

<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>

(これは引用符なしでは少し奇妙に見えるので、c#属性を引用符で囲んで試しましたが、違いはありませんでした)

Web.configには次のものが含まれます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService">

        <!-- This endpoint is exposed at the base address provided by host:                                        http://localhost/servicemodelsamples/service.svc  -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />

        <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
</configuration>

Service.csに含まれるもの:

using System;
using System.ServiceModel;

namespace Microsoft.ServiceModel.Samples
{

    [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        double Add(double n1, double n2);
        [OperationContract]
        double Subtract(double n1, double n2);
        [OperationContract]
        double Multiply(double n1, double n2);
        [OperationContract]
        double Divide(double n1, double n2);
    }


    public class CalculatorService : ICalculator
    {
        public double Add(double n1, double n2)
        {
            return n1 + n2;
        }
        public double Subtract(double n1, double n2)
        {
            return n1 - n2;
        }
        public double Multiply(double n1, double n2)
        {
            return n1 * n2;
        }
        public double Divide(double n1, double n2)
        {
            return n1 / n2;
        }
    }
}
4

4 に答える 4

7

まあ、これはうまくいったようです。IISマネージャーで[アプリケーションの作成]アイテムがまだ見つかりません。その部分はちょっとイライラしますが、とにかく機能しているように見えてうれしいです。

wwwrootの下に物理ディレクトリIISHostedCalcServiceを作成しました。それはいくつかの混乱を引き起こしていました。これは、 http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svcがほぼ機能していたことを意味しますが、機能しないはずです。IISHostedCalcServiceをwwwrootの外に移動しましたが、サービスにアクセスできる場所はhttp://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svcだけです。

次に、http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svcにアクセスすると、「このコレクションにはすでにスキームhttpのアドレスが含まれています。
スキームごとに最大で1つのアドレスが存在する可能性があります。このコレクション。」エラー。その解決策は、system.serviceModelのすぐ下にあるweb.configファイルに以下を追加することです。

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://test.com.cws1.my-hosting-panel.com"/>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

その後、http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svcにアクセスすると、新しいエラーが発生しました。「契約名IMetadataExchangeが、によって実装された契約のリストに見つかりませんでした。サービスCalculatorService」。これに対する解決策は、web.configファイルを次のように変更することです(つまり、動作セクションを追加し、serviceelementにbehaviorConfiguration = "SimpleServiceBehavior"を追加します)。

<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://test.com.cws1.my-hosting-panel.com"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior">
      ...
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SimpleServiceBehavior">
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
</configuration>

最後に、 http:// msdnのチュートリアルのステップ5cでhttp://test.com.cws1.my-hosting-panel.com/IISHostedCalc/service.svc?wsdlにsvcutilを指定することで、クライアントプロキシを作成できました。 .microsoft.com / en-us / library/ms733133.aspx。しかし、クライアントを実行すると、「発信者はサービスによって認証されていません」というエラーが発生しました。これに対する解決策は最も簡単でした。サービスのweb.configとクライアントのweb.configでbinding="wsHttpBinding"をbinding="basicHttpBinding"に変更するだけです(またはサービスのweb.configを変更した後にsvcutilを再実行します)。

web.configは次のようになりました。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment>
      <baseAddressPrefixFilters>
        <add prefix="http://test.com.cws1.my-hosting-panel.com"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior">

        <!-- This endpoint is exposed at the base address provided by host:                                        http://localhost/servicemodelsamples/service.svc  -->
        <endpoint address=""
                  binding="basicHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />

        <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->            
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />

      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SimpleServiceBehavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.web>
    <customErrors mode="Off"/>
  </system.web>
</configuration>
于 2010-04-30T02:27:50.120 に答える
4

新しいアプリケーションを作成するには、[デフォルトのWebサイト]ノードを右クリックします。コンテキストメニューから[アプリケーションの追加]を選択します。

于 2010-08-25T20:53:27.017 に答える
1

同じエラーが発生しました。問題は、サービスがコンパイルするために必要なアセンブリがサーバー上にないことだけでした。

ここで説明されていることはすべて私には必要ありませんでした。

エラーが何であるかを確認するには、service.svcファイルとservice.svc.csファイルをApp_Codeディレクトリに移動してみてください。そうすれば、実際のエラーに関連するエラーメッセージが表示されます。

私の場合、いくつかのアセンブリをデプロイするのを忘れたために欠落していた名前空間。不足しているアセンブリをアップロードし、サービスを正しく実行してから、それらが属していたサービスファイルを元に戻しました。

于 2011-07-22T02:15:26.270 に答える
1

この問題が発生しました。

  1. 公開されたファイルをwwwrootの下に保管しました
  2. .svcファイルで[参照]をクリックします
  3. これは同じ例外をスローします

解像度

  1. 同じための仮想ディレクトリを作成しました
  2. .svcファイルを参照してみます。

働く...

于 2012-01-13T07:15:19.633 に答える