2010-03-03 25 views
13

Tôi có một dịch vụ WCF được lưu trữ trong một ứng dụng web (IIS). Tôi cần hiển thị 1 điểm kết thúc trên wsHttp và điểm kết thúc khác trên netTcp. Tôi đang trên một môi trường IIS7 mà làm cho nó có thể cho tôi để lưu trữ các dịch vụ dựa trên HTTP không. Dù sao, khi tôi duyệt. svc tập tin sử dụng một trình duyệt, tôi nhận được lỗi:WCF được lưu trữ trong một ứng dụng Web và chế độ tương thích

The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application

Bởi googling, tôi nhận ra rằng WCF chạy trong hai chế độ - Mixed và ASP.NET tương thích. Khi tôi áp dụng thuộc tính

[AspNetCompatibilityRequirements(
     RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

Tuy nhiên, dường như khi tôi áp dụng thuộc tính này cho việc triển khai Hợp đồng dịch vụ, tôi không thể sử dụng ràng buộc không phải HTTP.

Làm thế nào để thiết lập nó để:

  • tôi có thể hỗ trợ thiết bị đầu cuối HTTP không
  • Tôi có thể lưu trữ các dịch vụ trên một ứng dụng Web
  • tôi không tạo ra nhiều dịch vụ một với aspnet tính năng tương thích được bật và tính năng khác đã tắt
+0

Bạn có đang sử dụng tính năng ASP.NET không? Nếu vậy thì cái nào? Nó có thể được gỡ bỏ? –

+0

Chưa - cho đến nay (Không chắc chắn Nếu tôi sẽ sử dụng phiên hoặc ngữ cảnh trong tương lai). Bạn có nói rằng nếu tôi không sử dụng bất kỳ tính năng asp.net, tôi sẽ có thể tắt AspNetCompatibility và vẫn lưu trữ nó trong một máy chủ web? – DotnetDude

+0

tại sao bạn không tiếp xúc với dịch vụ bằng cách sử dụng dịch vụ windows? Tôi nghĩ rằng đầu tiên và thứ hai là không thể thực hiện trừ khi bạn sử dụng WAS. –

Trả lời

4

Khi đoán, bạn đã bật cài đặt tương thích ASP.NET cho ứng dụng IIS của mình. This link dường như có liên quan.

Tôi khuyên bạn nên tắt chế độ tương thích ASP.NET. Tôi đã chạy net.tcp và basicHttp endpoints từ cùng một ứng dụng trong IIS mà không có vấn đề gì.

chỉnh sửa: Đây là thay đổi cấu hình bạn cần thực hiện/kiểm tra (từ liên kết được cung cấp). Giá trị phải được thay đổi từ 'false' thành 'true'.

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” /> 
</system.serviceModel> 
+0

Nếu tôi tắt tính tương thích ASP.NET, sau đó tôi nhận được "lỗi kích hoạt" (tin nhắn trong bài viết gốc) – DotnetDude

+0

Trong bài viết ban đầu của bạn, bạn đang nói về việc thêm một thuộc tính vào dịch vụ xác định có hay không dịch vụ có thể chạy trong AspCompatibilityMode. Tôi đang nói về cấu hình ứng dụng - trong cấu hình web của bạn - để ứng dụng không sử dụng AspCompatibilityMode chút nào (và thuộc tính của bạn trở nên dư thừa). Câu trả lời của tôi đã được chỉnh sửa. –

1

Hãy thử thiết multipleSiteBindingsEnabled đến mức khó tin trong ServiceHostingEnvironment. Tôi không phải là một chuyên gia trong WCF nhưng sau khi đi qua các câu hỏi và đọc một loạt các trang web tôi nghĩ rằng nó sẽ có ý nghĩa kể từ khi bạn đang sử dụng cả hai thiết bị đầu cuối dịch vụ TCP và HTTP.

Hy vọng điều này sẽ hữu ích.

7

Có rất nhiều điều xảy ra ở đây. Trước hết, trừ khi bạn đang thực sự sử dụng một tính năng ASP.net cụ thể, bạn KHÔNG nên sử dụng chế độ tương thích. Để bật tắt rằng, hãy làm theo gợi ý của Kirk, và cũng có thể loại bỏ dòng này từ mã của bạn:

[AspNetCompatibilityRequirements(
     RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

chế độ tương thích là không cần thiết chỉ để lưu trữ một dịch vụ HTTP, nó chỉ nếu bạn muốn sử dụng tính năng ASP.net mà không có trong WCF (hoặc cần phải chuyển một dịch vụ asmx cũ sang WCF mà không thay đổi mã khác).

Vấn đề thứ hai là lưu trữ một ràng buộc không HTTP bằng IIS. Điều đó chỉ hoạt động trong IIS 7, và chỉ sử dụng WS. Tính tương thích ASP.net sẽ KHÔNG làm việc với một ràng buộc không HTTP, bởi vì ASP.net yêu cầu HTTP.

Vì vậy, những gì bạn đang cố gắng làm là không thể miễn là chế độ tương thích được bật. Loại bỏ nó, và sau đó mọi thứ sẽ hoạt động.

0

Tôi cũng gặp sự cố này.
kết quả là di chuyển một số mã mới, tham chiếu đến Hệ thống.Không gian tên web nhưng không thực sự yêu cầu nó, vào một dự án WCF hiện có. xóa những người sử dụng câu lệnh đã giải quyết vấn đề cho tôi.

Tôi dự kiến ​​sẽ phải theo dõi mã yêu cầu không gian tên đó nhưng đã may mắn.

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