簡體   English   中英

無法使用IIS托管WCF服務

[英]Unable to Host a WCF service using IIS

我正在使用指南在IIS中托管我的簡單WCF服務。 但是當我嘗試在Internet Explorer中對其進行測試時出現此錯誤: 這是錯誤圖像

我在IIS管理器中的“默認網站”下創建了一個名為“ IISHostedWCFService”的文件夾,並在其中添加了一個名為“ IISHostedService”的應用程序。 我還使用以下代碼創建了Service.svc文件:

<%@ ServiceHost Language="C#" Debug="true" Service="CalculatorService" %>

帶有以下代碼的App.config文件:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <!-- This section is optional with the default configuration
        model introduced in .NET Framework 4 -->
      <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 exposed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

</configuration>

我還創建了一個名為App_Code的文件夾,並在其中創建了Service.cs,其中包括我的源代碼:

 using System;
using System.ServiceModel;

    namespace CalculatorService
    {
        [ServiceContract]
        public interface ICalculator
        {
            [OperationContract]
            double add(double n1, double n2);
            [OperationContract]
            double multiply(double n1, double n2);
        }

        public class CalculatorService : ICalculator
        {
            public double add(double n1, double n2)
            {
                return n1 + n2;
            }

            public double multiply(double n1, double n2)
            {
                return n1 * n2;
            }
        }
    }

我認為這可能是一個名稱空間問題,因為我不確定我的名稱空間應該是什么,我很困惑。

我是WCF的初學者,非常感謝使用IIS托管WCF的任何意見或建議。 謝謝

UPDATE1:多虧了Ric .Net的回答,我對名稱空間有了更好的了解,但仍然出現服務器錯誤。 我按照Ric.Net的建議更新了Service.svc和App.config文件,還設置了

<service name="CalculatorService.CalculatorService">

這是新的錯誤: 新錯誤

您以正確的方式。 從您發布的內容來看,這是一個名稱空間問題。

ISS / WCF需要具有ServiceContract屬性的類或接口的全名。 它還需要實現ServiceContract的實現的全名。

查看提供的代碼,該代碼將是: CalculatorService.ICalculator以及實現CalculatorService.CalculatorService的實現。

您的svc文件將變為:

ServiceHost語言=“ C#” Debug =“ true” Service =“ CalculatorService.CalculatorService”

和配置:

    <endpoint address=""
              binding="wsHttpBinding"
              contract="CalculatorService.ICalculator" />

但是我不確定100%,因為您可以在項目設置中進行全局更改。 您可以通過打開“類視圖”窗口來檢入Visual Studio。 這將為您顯示解決方案中項目的樹狀視圖。 找到定義了ICalculator的項目,然后將您從根名稱空間擴展到接口/類。

請執行以下步驟來解決它:

1)在服務標記中,將服務更改為CalculatorService.CalculatorService

<%@ ServiceHost Language="C#" Debug="true" Service="CalculatorService" %>

2)在您的配置文件中,將服務標簽的名稱屬性更改為CalculatorService.CalculatorService,如下所示:

<service name="CalculatorService.CalculatorService">

3)再次在配置文件中將端點的合同屬性更改為您的接口正確路徑,如下所示:

<endpoint address=""
          binding="wsHttpBinding"
          contract="CalculatorService.ICalculator" />

經過數小時的測試,我終於弄清楚了:我用來在IIS中啟動和運行WCF的指南不准確,缺少一些內容,它是.dll文件。 我只是創建了一個名為“ bin”的文件夾,並在其中復制了WCF服務.dll文件,它運行良好。 謝謝大家的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM