このチュートリアルに従って、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;
}
}
}