1

IIS を使用して共有サーバー上で WCF サービスを実行することができません。

いくつかのチュートリアルを試しました: http://technologyriver.blogspot.com/2012/02/prerequisites-check-windows-7.html http://msdn.microsoft.com/en-us/library/ms733766.aspx

IIS で WCF サポートを有効にするコマンド ライン命令の実行に関するブログを読みました。ただし、ホスティング会社は、自社のボックスでコマンドを実行することを拒否しています。

サービスは私の開発マシンで正常に動作します。ただし、サービスをリモートサーバーで実行することはできません。

svc ファイルをクリックすると、次のエラーが表示されます。

HTTP エラー 404.3 - 見つかりません

拡張機能の構成が原因で、リクエストしているページを表示できません。ページがスクリプトの場合は、ハンドラーを追加します。ファイルをダウンロードする必要がある場合は、MIME マップを追加します。*

.svc ファイル:

<% @ServiceHost Language=C# Debug="true" Service="MyService" Factory="MyServiceHostFactory" CodeBehind="~/App_Code/Service.cs" %>

Web.config:

<service name="MyService" behaviorConfiguration="MyServiceBehavior">
    <endpoint contract="IMyService" binding="basicHttpBinding">
      <identity>
        <dns value="http://www.mydomain.com" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    <host>
      <baseAddresses>
        <add baseAddress="http://www.mydomain.com:8732/Services/Service/" />
      </baseAddresses>
    </host>
  </service>

Service.cs:

using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;

// A WCF service consists of a contract (defined below as IMyService, DataContract1), 
// a class which implements that interface (see MyService), 
// and configuration entries that specify behaviors associated with 
// that implementation (see <system.serviceModel> in web.config)

[ServiceContract()]
public interface IMyService
{
    [OperationContract]
    string MyOperation1(string myValue1);
    [OperationContract]
    string MyOperation2(DataContract1 dataContractValue);
}

public class MyService : IMyService
{
    public string MyOperation1(string myValue1)
    {
        return "Hello: " + myValue1;
    }
    public string MyOperation2(DataContract1 dataContractValue)
    {
        return "Hello: " + dataContractValue.FirstName;
    }
}

[DataContract]
public class DataContract1
{
    string firstName;
    string lastName;

    [DataMember]
    public string FirstName
    {
        get { return firstName; }
        set { firstName = value; }
    }
    [DataMember]
    public string LastName
    {
        get { return lastName; }
        set { lastName = value; }
    }
}

public class MyServiceHostFactory : ServiceHostFactoryBase
{
    protected virtual ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        // Specify the exact URL of your web service
        Uri webServiceAddress = new Uri("http://www.mydomain.com/MyService.svc");

        MyServiceHost webServiceHost = new MyServiceHost(serviceType, webServiceAddress);
        return webServiceHost;
    }

    public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
    {
        throw new NotImplementedException();
    }
}

public class MyServiceHost : ServiceHost
{
    public MyServiceHost(Type serviceType, params Uri[] baseAddresses)
        : base(serviceType, baseAddresses)
    { }

    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();
    }
}
4

2 に答える 2

1

ホストを切り替える必要がありました。

私はもともとDiscountASP.Netを使用していましたが、WCF設定が有効になっていることを確認するという私の要求を拒否し、開発者を雇うか、MS IIS仕様に従う必要があると言われました. (PS 彼らは私が実際に SDET であることを知りませんでした。)

その結果、別のプロバイダー (つまり Winhost) に切り替える必要がありました。以前のホストが私にやりたいと思っていたクレイジーなwebconfigの変更やServiceHostFactoryのコーディングのがらくたをする必要なく、今はうまくいきます。

実際に WCF サービスをサポートしているホスティング会社に最終的に切り替えるまで、技術サポートでチケットを再開するのに 5 日間を費やしました。

この恐ろしい悪夢を終わらせてくれた Winhost に感謝します!

于 2013-01-07T07:51:13.730 に答える
0

その場合、リモートサーバーでのアクセス/構成可能性の問題のようです。

デプロイされたサービスの次の領域を確認してください。

  • WCF サービスのバインドが正しく構成されていること、DNS およびポート (既定値は 80)
  • サービスの認証モード (WSDL を介したブラウザへの匿名アクセスを許可する必要があります)
  • Web サイトに付与されたアクセス許可 (ディレクトリおよびユーザーのアクセス許可)

それらのどれも機能しない場合、サービスが展開されたときに従った手順をリストアップできますか?

于 2013-01-06T09:27:00.050 に答える