web-dev-qa-db-ja.com

WCFがIIS 6.0

WCFサービスをIIS 6で実行しようとしています。

.svcおよびaspnet_isapi.dllマッピングを次のように作成しました: http://msdn.Microsoft.com/en-us/library/ms752241.aspx

Server1.svcページを表示すると、404が表示されます。

単純な.aspxページを使用してサイトをテストし、URLが機能していることを確認しましたが、.svc拡張子は機能していません。

.NET 3.5 SP1をインストールし、web.configが3.5アセンブリを参照していますが、.aspxページを表示してもエラーが発生しないため、おそらくこれらのアセンブリは正常に取得されています。

何が悪いのでしょうか?

19
Blankman

おそらく、.svc拡張子はASP.NET(WCF)によって処理されるものとしてIIS)に登録されていません。

次の2つの手順を試してください(必要に応じてFrameworkをFramework64に置き換えます)。

移動:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\

次に実行します:

aspnet_regiis -i

C:\ Windows\Microsoft.NET\Framework\v3.0\Windows CommunicationFoundationに移動します

次に実行します:

ServiceModelReg.exe -i
20
Pawel Pabich

Internet Information Service (IIS) Managerの下で、Web Service Extensionというノードを開きます。 ASP.NET v2.0.5.0727がAllowedに設定されていることを確認してください。さまざまな設定を探すのに何時間も費やしましたが、禁止に設定されていることがわかりました。 [許可]ボタンをクリックするだけで、ASP.NETが有効になります。

17
Eugene Yokota

私が考えることができる2つのことがあります:

.svc拡張子が正しく設定されていません(説明によると、最も可能性が低いです)。詳細については、これを確認できます post

または、Webサイトに複数のホストヘッダーがあります。この問題を解決するには、単一のホストヘッダーを使用するか、ファクトリを使用する必要があります。次に例を示します。

namespace MyNamespace
{
    public class MultipleHostServiceFactory : ServiceHostFactory
    {
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
            List<Uri> addresses = new List<Uri>();
            addresses.Add(baseAddresses[0]);
            return base.CreateServiceHost(serviceType, addresses.ToArray());
        }
    }
}

次に、.svcファイルのマークアップにファクトリを設定する必要があります。

<%@ ServiceHost Language="C#" 
                Debug="false" 
                Factory="MyNamespace.MultipleHostServiceFactory" 
                Service="MyNamespace.MyService" 
                CodeBehind="MyService.svc.cs" %>
6
Darin Dimitrov

私も同じ問題を抱えていました。最終的には、64ビットバージョンのWindows 2003 Serverを実行していて、アセンブリを「任意のCPU」用に構成していました。アセンブリをx86に変更してサーバーにアップロードすると、すべてが機能しました。

私が読んだ30のスレッドのどこにも誰もそれについて言及していない理由はわかりませんが、私の友人が私にそれを勧めてくれて、それは魅力のように機能しました。

誰かが同じ問題を抱えている場合に備えて、それを捨てるだけです。

3
Travis

同じ問題が発生し、ISAPI拡張を許可することで解決しました。 [インターネットインフォメーションサービス(IIS)マネージャー]で、[Webサービス拡張機能]というノードを開きます。 「すべての不明なISAPI拡張機能」が「許可」に設定されていることを確認してください。

0
Milind D

最終的にこの例を使用して最初に機能するまで、これと何時間も戦いました: http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-ステップガイド

私はリンクのみの答えが良くないことを知っています、そして他の人はこのCPリンクを使って ここStackoverflowでこのタイプの問題を解決します そう記事がダウンした場合の基本的な手順は次のとおりです。

ステップ1

まず、Visual Studio2010を起動します。[ファイル]-> [新規]-> [プロジェクト]をクリックします。新しい「WCFサービスアプリケーション」を作成します。

ステップ2

プロジェクトを作成すると、ソリューションで、既定でWCFサービスとインターフェイスファイルが既に作成されていることがわかります(Service1.csとIService.cs)。これらの2つのファイルを削除すると、独自のインターフェイスとWCFサービスファイルが作成されます。

ステップ3

次に、ソリューションを右クリックして、新しいWCFサービスファイルを1つ作成します。サービスファイルに「RestServiceImpl.svc」という名前を付けました。

ステップ4

記事の冒頭で説明したように、XMLおよびJSON形式でデータを返すことができるAPIを作成する予定ですが、これがそのためのインターフェースです。 IRestServiceImplに、次のコードを追加します

上記のコードでは、XMLDataとJSONDataの2つの異なるIRestServiceメソッドを確認できます。 XMLDataは結果をXMLで返しますが、JSONDataはJSONで返します。

[ServiceContract]
public interface IRestServiceImpl
{
    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "xml/{id}")]
    string XMLData(string id);

    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "json/{id}")]
    string JSONData(string id);
}

ステップ5

RestServiceImpl.svc.csファイルを開き、そこに次のコードを記述します。

public class RestServiceImpl : IRestServiceImpl
{
    public string XMLData(string id)
    {
        return "You requested product " + id;
    }

    public string JSONData(string id)
    {
        return "You requested product " + id;
    }
}

ステップ6

Web.Config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="RestService.RestServiceImpl" behaviorConfiguration="ServiceBehaviour">
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address ="" binding="webHttpBinding" contract="RestService.IRestServiceImpl" behaviorConfiguration="web">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
        </endpoint>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviour">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 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>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

ステップ7

IISの場合:

enter image description here

0
Jeremy Thompson