簡體   English   中英

IIS上的WCF服務。 如何擺脫URL路徑中的“ Service.svc”組件?

[英]WCF Service on IIS. How to get rid of the “Service.svc” component in the URL path?

我在IIS上托管了WCF服務。 出於商業原因,我無法發布此實例的公共URL,但是我相信您會明白我的意思:

問題是,為了到達我的端點,似乎我已經將Service.svc作為路徑段的一部分包括在內 ,即,我必須使用這樣的URL:

http://<domain>/<app-name>/Service.svc/<relative-path>

如何避免這種情況? 我的意思是,我想通過以下方式訪問我的服務:

http://<domain>/<app-name>/<relative-path>

在開發過程中自托管服務時,我完全能夠做到這一點。


最后,但這不是那么超驗,瀏覽到http://<domain>/<AppName>/Service.svc URL將顯示標准服務信息頁面:

有沒有辦法我也可以阻止這種訪問?

在此處輸入圖片說明

第一部分:不具有URL的“ service.svc”部分,可以使用ASP.NET路由功能和ServiceRoute類-路由的前綴為空字符串。 http://blogs.msdn.com/b/endpoint/archive/2010/01/25/using-routes-to-compose-wcf-webhttp-services.aspx上的帖子顯示了如何完成此操作。

第二部分:為防止顯示“幫助”頁面,可以通過config(或使用自定義服務主機工廠的代碼)禁用它。 這是通過config完成的方法:

<serviceBehaviors>
    <behavior>
        <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"/>
    </behavior>
</serviceBehaviors>

該行為沒有“名稱”屬性,這意味着它將用作服務的默認行為。

有關像我這樣的.net新手的分步說明:

  1. 打開您的Web.config文件,並確保將aspNetCompatibilityEnabled設置為true:

     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
  2. 右鍵單擊項目,然后單擊添加->新建項目。 找到“全局應用程序類”。 這將自動生成Global.asax文件。

  3. 打開Global.asax文件,並確保Application_Start方法如下所示:

     protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(new ServiceRoute("", new ServiceHostFactory(), typeof(MyServiceImplementation))); } 

(使用您在Service1.svc中調用的任何類更改MyServiceImplementation

  1. 確保已添加以下參考:

     using System.ServiceModel.Activation; using System.Web.Routing; 

如果找不到這些文件,並且您使用的是.net 4.5之前的版本,請確保使用的是完整安裝而不是客戶端安裝。 還要確保已添加了這些程序包引用(右鍵單擊項目,單擊“添加”->“引用”,找到程序包名稱並確保已選中)。

  1. 重新啟動IIS。 現在應該隱藏Service1.svc(或您所謂的任何文件)文件。

您只需不公開服務元數據即可達到此目的-只需注釋端點

 <endpoint address="mex" binding="mexHttpBinding" name="IMetadataExchange_mexHttpBinding" contract="IMetadataExchange" />

根據網址-我只同意@Edmund Y-他提供了有用的鏈接

我只是想知道我為實現@carlosfigueira的建議所做的是最干凈的事情:

我最終使用了Global.asax文件,並在Application_Start處理程序中添加了一個帶有空routePrefixServiceRoute 我不太確定為什么我在@Edmund Y共享的文章中讀到為什么使用WebServiceHostFactoryServiceHostFactoryServiceRoute + WebServiceHostFactory殺死了WSDL? 如何使用?wsdl創建無擴展WCF服務

無論如何,我認為我設法解決了我所需要的,感謝您的幫助。

暫無
暫無

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

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