【WCF】如何將WCF部署到遠程伺服器

来源:http://www.cnblogs.com/lovecsharp094/archive/2016/09/05/5843632.html
-Advertisement-
Play Games

一、前言 最近需要將自己寫的WCF服務部署到遠程伺服器上,也就是公網上。宿主是IIS,在配置成功之前遇到了很多問題,問題如下: 1. WCF該怎麼宿主在IIS上,為何會出現 400 Bad Request 2. 防火牆如何開放 3. 為何我能在客戶端引用服務,但是運行時依然提示Soap操作錯誤,40 ...


一、前言

      最近需要將自己寫的WCF服務部署到遠程伺服器上,也就是公網上。宿主是IIS,在配置成功之前遇到了很多問題,問題如下:

      1. WCF該怎麼宿主在IIS上,為何會出現 400 Bad Request

      2. 防火牆如何開放

      3. 為何我能在客戶端引用服務,但是運行時依然提示Soap操作錯誤,404 Not Found

     

      那麼接下來,我就告訴大家我走過的坑,也避免了百度上各種司機瞎帶路。(網上好多其實是本地部署,Localhost誰都會,VS直接Debug都行)

 

二、準備階段

     首先你要配置好的你的web.config,web.config的配置正確與否直接影響你WCF部署的成功與否。這裡我可以提供一個我的例子,供大家參考:

 1 <?xml version="1.0"?>
 2 <configuration>
 3   <appSettings/>
 4   <connectionStrings/>
 5   <system.web>
 6     <compilation debug="true" targetFramework="4.0"/>
 7     <!--
 8         通過 <authentication> 節,可以配置
 9         ASP.NET 用於識別來訪用戶身份的
10         安全驗證模式。 
11     -->
12     <authentication mode="Windows"/>
13     <!--
14         如果在執行請求的過程中出現未處理的錯誤,
15         則可以通過 <customErrors>16         配置相應的處理步驟。具體來說,
17         開發人員可以通過該節配置
18         將取代錯誤堆棧跟蹤顯示的 HTML 錯誤頁。
19 
20         <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
21          <error statusCode="403" redirect="NoAccess.htm" />
22          <error statusCode="404" redirect="FileNotFound.htm" />
23         </customErrors>
24     -->
25     <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
26   </system.web>
27   <!-- 
28       在 Internet 信息服務 7.0 下運行 ASP.NET AJAX 時 system.webServer 節
29       是必需的。而對於早期版本的 IIS,此節並不是必需的。
30   -->
31   <system.webServer>
32     <!--
33         若要在調試過程中瀏覽 Web 應用程式根目錄,請將下麵的值設置為 True。
34         在部署之前將該值設置為 False 可避免泄露 Web 應用程式文件夾信息。
35       -->
36     <directoryBrowse enabled="true"/>
37   </system.webServer>
38   <system.serviceModel>
39 
40     <bindings>
41       <basicHttpBinding>
42         <binding name="bindingConfig" closeTimeout="00:30:00" openTimeout="00:30:00"
43           receiveTimeout="00:30:00" sendTimeout="00:30:00" hostNameComparisonMode="StrongWildcard"
44           maxBufferPoolSize="2147483647"
45           maxReceivedMessageSize="2147483647"
46           maxBufferSize="2147483647"
47           messageEncoding="Text">
48           <security mode="None"/>
49         </binding>
50       </basicHttpBinding>
51     </bindings>
52     
53            
54     <services>
55       <service behaviorConfiguration="BiChengUpdateService.Service1Behavior"
56         name="BiChengUpdateService.UpdateService">
57         <endpoint address="" binding="basicHttpBinding"
58           bindingConfiguration="bindingConfig" name="Endpoint1" contract="BiChengUpdateService.IUpdateService" />
59         <endpoint address="mex" binding="mexHttpBinding" name="Endpoint2"
60           contract="IMetadataExchange" />
61       </service>
62     </services>
63     <behaviors>
64       <serviceBehaviors>
65         <behavior name="BiChengUpdateService.Service1Behavior">
66           <!-- 為避免泄漏元數據信息,請在部署前將以下值設置為 false -->
67           <serviceMetadata httpGetEnabled="true"/>
68           <!-- 要接收故障異常詳細信息以進行調試,請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息 -->
69           <serviceDebug includeExceptionDetailInFaults="false"/>
70           <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" />
71         </behavior>
72       </serviceBehaviors>
73     </behaviors>
74   <serviceHostingEnvironment  multipleSiteBindingsEnabled="true" /> 
75   </system.serviceModel>
76 </configuration>

 

這裡,一定要註意的是兩個地方:

1. Endpoint address

2. MultipleSiteBindingEnabled

 

問:web.config里有兩個Endpoint address, 一個是mex(這個我們不管),另一個是”空”(這個特別重要),為什麼要設成空值呢?

     難道部署在遠程伺服器上不應該寫的是伺服器的IP地址嗎?

答:錯!這個WCF所部署的IP地址和其相應的埠我們交給IIS即可。

 

問:如果我在Endpoint address寫了伺服器的IP地址及埠,例如:114.112.133.23:2037/UpdateserIve.svc會如何?

答:那你就掉坑裡了,如果這樣寫,客戶端確實可以引用你的服務,但是在114.112.133.23:2037/UpdateserIve.svc?wsdl(用瀏覽器打開),

      看最後一行,你會發現你的Soap Address會是這個尿性:114.112.133.23:2037/UpdateserIve.svc/114.112.133.23:2037/UpdateserIve.svc

      這明顯地址有複製了一遍嘛!!!然後客戶端的會出現Soap 操作錯誤,具體的錯誤Message為404 Not Found。

 

      配置好上述config後,我們在遠程伺服器硬碟上新建一個文件夾,放置發佈服務時需要的文件,一共三個:bin, .svc 以及web.config

      bin文件主要放置你在WCF服務中生成的dll,其實你編譯完WCF服務項目後,直接把bin文件拷貝了就行。

 

三、IIS配置

      1. 打開遠程伺服器的IIS,找到“處理程式映射”,看看有沒有這個:

      

          沒的話,這個可以百度一下,我就不贅述了,這步沒司機會坑你。     

 

         2. 添加一個應用程式池,專門給你部署的WCF服務使用:

 

          

           托管管道模式為集成!請註意,你的WCF項目編譯時也要一致!       

          3. 新建網站,配置網站的物理地址:

          物理地址就是之前新建的文件夾,應用程式池就是我們之前剛建的應用程式池。這裡沒顯示出.svc及web.config,網站右鍵切換到內容視圖即可

 

         4. IIS的配置埠:

        

         IP地址不要寫你的伺服器公網地址,會出現400 Bad Request,直接選擇全部未分配

 

四、防火牆設置

      有百度大神說把防火牆關了,關你大爺,伺服器這麼重要關什麼防火牆。假設你要用7293埠,你只要在防火牆開放這個埠即可。

       首先,你的防火牆一定要能允許WCF運行:

       其次,新建入站規則,點擊埠,開放出你所需要的WCF埠即可!

 

五、總結

      WCF既要求你會寫代碼,又要你會配置,最後還得要求你會部署。總結下這幾個步驟:

1. 寫好代碼,IServiceT以及ServiceT.svc

2. 配置好你的web.config,這個是核心,建議多看看博園裡大神的分析與指導。

3. IIS的配置,應用程式池->處理程式映射->新建網站->物理路徑->IP及埠

4. 防火牆配置,是否允許WCF->新建入站規則,開放指定的WCF埠

5. 遠程伺服器WCF配置完後,在你客戶端電腦上去訪問頁面:XXX.XXX.XXX.XX:XX/YYY.svc ,

    如果正常:繼續在該Url後添上“?wsdl”,即:

    XXX.XXX.XXX.XX:XX/YYY.svc?wsdl,查看網頁最下方的Soap Address是否為XXX.XXX.XXX.XX:XX/YYY.svc

                   如果是機器名:win2008:XX/YYY.svc,那你肯定第二步沒做好!

    如果不正常第三步就有問題了


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [comment]: Docker on CentOS for beginners Introduction The article will introduce Docker on CentOS. Key concepts Docker Docker is the world's leading ...
  • 最簡單的bootloader的編寫步驟: 1. 初始化硬體:關看門狗、設置時鐘、設置SDRAM、初始化NAND FLASH2. 如果bootloader比較大,要把它重定位到SDRAM3. 把內核從NAND FLASH讀到SDRAM4. 設置"要傳給內核的參數"5. 跳轉執行內核 改進:1. 提高C ...
  • Homebrew 是mac上的包管理工具,其官網; http://brew.sh/ 在使用brew安裝node之後安裝一些常見工具比如 gulp 提示安裝成功之後 ,使用發現不存在comman gulp,這個時候我們要檢查下npm全局路徑在哪裡 正常的路徑應該是 /usr/local/lib/nod ...
  • PMP,全稱是Percona Monitoring Plugins,是Percona公司為MySQL監控寫的插件。支持Nagios,Cacti。從PMP 1.1開始,支持Zabbix。 下麵,看看如何在Zabbix上安裝PMP。 配置Zabbix Agent 下載PMP 下載地址:https://w ...
  • ps -ef | grep java ps aux | grep java ps aux 是用BSD的格式來顯示Java進程 顯示的項目有: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ps -ef 是用標準的格式來顯示Java進程 ...
  • DevExpress中定義的ChartControl很不錯,很多項目直接使用這種控制項。 本節講述雷達圖的樣式設置 <Grid> <Grid.Resources> <DataTemplate x:Key="LabelItemDataTemplate" DataType="dxc:SeriesLabel ...
  • 最近.net core可以跨平臺了,這是一個偉大的事情,為了可以趕上兩年以後的跨平臺部署大潮,我也加入到了學習之列。今天研究的是依賴註入,但是我發現一個問題,困擾我很久,現在我貼出來,希望可以有人幫忙解決或回覆一下。 背景:我測試.net自帶的依賴註入生命周期,一共三個:Transient、Scop ...
  • 在寫有關文字的主題前,筆者翻閱了幾本書上的相關章節,研究了幾天無果。 徐明亮《OpenGL游戲編程》書中介紹的是“點陣圖字體”,也就是把字體柵格化,然後畫出來。照著書上的VC代碼翻譯為C#的,突然卡在一個windows API, wglUseFontBitmpas()上面了,這個函數要傳入一個DC,慘 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...