[C#.NET][WCF] MSMQ @IIS/WAS-host

  • 4241
  • 0
  • WCF
  • 2016-01-21

[C#.NET][WCF] MSMQ @IIS/WAS-host

WAS = Windows Process Activation Service,可裝載非 http / https 的載體,照常理來說 IIS 載體應該會比自己寫的載體還要可靠,所以 WAS Host 是必學的技巧

實作步驟

Setp1.設定 WAS 環境

Setp2.在 IIS 加入支援 net.msmq 通訊協定的服務

Setp3.設定 MSMQ 權限

Setp4.設定專案

Step5.部署

Step6.測試


Setp1.設定 WAS 環境

1.確定IIS已安裝

2.設定 WAS 支援非 HTTP 通訊協定

3.安裝 (或確認安裝) WCF 啟動元件

 

省的日後麻煩我全裝了…

SNAGHTML18d07a6

SNAGHTML18d958e

 

Setp2.在 IIS 加入支援 net.msmq 通訊協定的服務

建立 AddMsmqSiteBinding.cmd 並輸入以下內容,並使用管理員身份執行,twoway是服務的名稱,可自行定義


%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.msmq',bindingInformation='localhost']
%windir%\system32\inetsrv\appcmd.exe add app /site.name:"Default Web Site" /path:/TwowayService /physicalPath:%SystemDrive%\inetpub\wwwroot\twoway
%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/twoway" /enabledProtocols:http,net.msmq
%windir%\system32\inetsrv\appcmd.exe set apppool "DefaultAppPool" /managedRuntimeVersion:v4.0

 

居然無法利用 UI 新增 net.msmq,所以要依靠指令

SNAGHTML1be8023

 

命令執行成功之後,就可以看到 net.msmq 已經加入了

SNAGHTML1bb4599

 

若要移除則輸入以下,或是直接在 UI 刪除

%windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/twoway" /enabledProtocols:http
%windir%\system32\inetsrv\appcmd.exe delete app /app.name:"Default Web Site/twoway"
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.msmq',bindingInformation='localhost']
%windir%\system32\inetsrv\appcmd.exe set apppool "DefaultAppPool" /managedRuntimeVersion:v4.0
rmdir /S /Q %SystemDrive%\inetpub\wwwroot\twoway


Setp3.設定 MSMQ 權限

在這例子裡我需要兩條 queue,service.svc 會對應到相關服務

twoway/service.svc

twoway/response

開始前請先確定 queue 已經存在,若不存在請新增

SNAGHTML1d3f369

SNAGHTMLdc4afa4

 

設定接收權限

SNAGHTMLdc60c75

 

Setp4.設定專案

延續上一篇的例子 http://www.dotblogs.com.tw/yc421206/archive/2013/10/24/125435.aspx 上一篇的例子,是用 self-host 寫的,現在要實做WAS Host,所以我現在要將 Main(string[] args) 拿掉,然後修改以下

1.@ service 專案,加入名為 service.svc 的檔案,然後鍵入以下,其中 service.RequestService 是服務的名稱

<%@ ServiceHost Language="c#" Debug="true" Service="service.RequestService" %> <%@ Assembly Name="System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" %>

2.將 app.config 更名為 web.config


<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.serviceModel>
    <bindings>
      <netMsmqBinding>
        <binding name="NoSecurity">
          <security mode="None" />
        </binding>
      </netMsmqBinding>
    </bindings>
    <services>
      <service name="service.RequestService">
        <endpoint address="net.msmq://localhost/private/twoway/service.svc"
                  binding="netMsmqBinding" bindingConfiguration="NoSecurity"
                  contract="service.Contract.IRequestService" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

 

 

3.確認所有的專案中的 net.msmq 路徑是否正確

net.msmq://" + hostName + "/private/twoway/service.svc
net.msmq://" + hostName + "/private/twoway/response
Step5.部署
1.接將 service 專案所產生的 *.dll 複製到 %SystemDrive%\inetpub\wwwroot\twoway\bin
client.Contract.dll
service.Contract.dll
service.dll

 
2.將web.config、service.svc 複製到 %SystemDrive%\inetpub\wwwroot\twoway

 
或者是靠 VS 幫忙,在 Post-bulid 裡鍵入以下

mkdir %SystemDrive%\inetpub\wwwroot\twoway
mkdir %SystemDrive%\inetpub\wwwroot\twoway\bin
copy "$(TargetDir)service.dll" %SystemDrive%\inetpub\wwwroot\twoway\bin
copy "$(TargetDir)client.Contract.dll" %SystemDrive%\inetpub\wwwroot\twoway\bin
copy "$(TargetDir)service.Contract.dll" %SystemDrive%\inetpub\wwwroot\twoway\bin
copy "$(ProjectDir)service.svc" %SystemDrive%\inetpub\wwwroot\twoway
copy "$(ProjectDir)web.config" %SystemDrive%\inetpub\wwwroot\twoway

 

image

 

Step6.測試

http://localhost/twoway/service.svc

image

 

執行 client,確定 server 有回傳資料

SNAGHTMLdf28604

 

 


 

文章出自:http://www.dotblogs.com.tw/yc421206/archive/2013/10/28/125731.aspx

範例下載:https://dotblogsfile.blob.core.windows.net/user/yc421206/1310/2013102814226336.zip

參考文章:http://msdn.microsoft.com/zh-tw/library/ms752246.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo