2012-04-29 38 views
20

Tôi mới tham gia WCF. Tôi đã phát triển một dịch vụ WCF mẫu. Dịch vụ của tôi sử dụng liên kết basicHttp.Làm thế nào để lưu trữ dịch vụ WCF của tôi trong trang web của tôi?

Tôi lưu trữ dịch vụ của mình bằng IIS 7.5 cục bộ bằng WAS và hoạt động tốt. Bây giờ tôi muốn lưu trữ dịch vụ của tôi trong trang web của mình.

Tôi tìm kiếm trên Google nhưng hầu hết trong số chúng được lưu trữ trong máy chủ cục bộ trong IIS. Xin vui lòng cho tôi biết làm thế nào để tôi làm điều đó? Nó sẽ là tốt hơn để tham khảo một số hướng dẫn hoặc hướng dẫn từng bước.

+2

Xem: [Làm thế nào để chủ nhà một dịch vụ WCF trong IIS] (http://msdn.microsoft.com/en-us/library/ms733766.aspx) - cho dù đó là 'localhost' hoặc bất kỳ máy chủ nào khác hoàn toàn không liên quan - chỉ cần thực hiện theo các bước đó. –

Trả lời

35

Bạn có về cơ bản hai lựa chọn, tôi tin rằng:

Lựa chọn 1 - "bin" triển khai (tùy chọn ưa thích)

  1. biên dịch dịch vụ WCF của bạn thành một DLL (thư viện lớp)
  2. tạo một trang web trong IIS
  3. sao chép WCF DLL vào thư mục .\bin của trang web
  4. tạo một *.svc tập tin trong trang web mà
  5. thêm một thích hợp web.config trong thư mục trang web để xác định điểm cuối của bạn và cấu hình dịch vụ vv

dịch vụ WCF của bạn bây giờ sẽ có thể truy cập tại địa chỉ cơ sở của trang web, cộng với tên của *.svc tệp, ví dụ

http://myserver/someweb/Myservice.svc 

bạn *.svc sẽ giống như thế này:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCF_Simple_Service.HelloIndigoService" %> 

Các Service= thuộc tính biểu thị lớp thực hiện dịch vụ - đầy đủ với không gian tên của nó.

Lựa chọn 2 - đưa công cụ vào App_Code

  1. tạo một trang web trong IIS
  2. đặt tất cả WCF của bạn liên quan *.cs tập tin trực tiếp vào thư mục .\App_Code
  3. tạo một file *.svc trong trang web mà
  4. thêm web.config thích hợp vào thư mục trang web để xác định điểm cuối và cấu hình dịch vụ của bạn, v.v.

Dịch vụ WCF của bạn giờ đây sẽ có thể truy cập được tại địa chỉ cơ sở của trang web, cùng với tên của tệp *.svc, ví dụ:

http://myserver/someweb/Myservice.svc 

bạn *.svc sẽ giống như thế này:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="Service" 
    CodeBehind="~/App_Code/Service.cs" %> 

Một đơn giản, mẫu web.config có thể trông như thế này:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="WithDebug"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <services> 
    <service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug"> 
     <endpoint 
      address="" 
      binding="basicHttpBinding" 
      contract="SimpleWCF.IHelloIndigoService" /> 
     <endpoint 
      address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 
    </service> 
    </services> 
</system.serviceModel> 

Bạn về cơ bản xác định thẻ <service> của bạn - và một lần nữa: name= biểu thị lớp đang triển khai dịch vụ - hoàn toàn đủ điều kiện với không gian tên của nó. Nó phải chứa ít nhất một điểm cuối - điểm cuối "mex" là tùy chọn - nhưng rất hữu ích, đặc biệt là để phát triển và thử nghiệm. Nó cho phép khách hàng "khám phá" dịch vụ và nhận được mô tả dịch vụ của nó để nó có thể giao tiếp với nó.

Khi dịch vụ của bạn được triển khai trong IIS, bạn có thể thấy nó hoạt động bằng cách sử dụng công cụ như WCF Test Client được giao miễn phí với WCF hoặc SoapUI là tiện ích thử nghiệm SOAP có mục đích chung (với phiên bản miễn phí để bạn sử dụng).

+1

Sai lầm trong tùy chọn 2 behaviorConfiguration = "true" là behaviorConfiguration = "WithDebug" –

+0

@PavelJedlicka: bạn hoàn toàn đúng - cảm ơn vì đã chỉ ra sai lầm này - đã sửa! –

3

chủ đề cũ, nếu ai đó tìm thấy nó ... nhưng thay vì * bạn .svc bạn cũng có thể tạo ra trong global.asax của bạn:

static Global() 
{ 
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new  ninjectServiceHostFactory(), typeof(testService))); 
} 
+0

Tôi đang đối mặt với một vấn đề tương tự. Bạn có thể vui lòng xây dựng câu trả lời của bạn không? –

+0

@ mav3n: Nếu bạn đang lưu trữ một trang web VÀ muốn lưu trữ một dịch vụ WCF (trong trang web của bạn) thì bạn có thể thêm mã ở trên vào global.asax. Bằng cách đó bạn không cần thêm tệp * .svc riêng biệt. Bạn sẽ tạo ra một dịch vụ như bạn sẽ luôn luôn làm. Trong ví dụ của tôi, tôi đã sử dụng Ninject, nhưng rõ ràng là bạn có thể sử dụng hàm tạo mặc định. – Roelant

Các vấn đề liên quan