2009-09-12 26 views
5

Theo mặc định, trang Web IIS 7 có ràng buộc net.tcp với chuỗi thông tin ràng buộc "808: ". Nếu tôi thêm một ràng buộc net.tcp khác với "xxx:" ngoại lệ xảy ra:Hosting dịch vụ WCF trong IIS 7 (WS) với ràng buộc net.tcp trên hai cổng tcp

Bộ sưu tập này đã chứa địa chỉ với sơ đồ net.tcp. Có thể có tối đa một địa chỉ cho mỗi lược đồ trong bộ sưu tập này. Tên thông số: mục

Làm cách nào tôi có thể giải quyết vấn đề này và nghe dịch vụ của tôi tại hai cổng?

Trả lời

8

Về cơ bản, trong dịch vụ của bạn, bạn sẽ có thể xác định bất kỳ số điểm cuối dịch vụ nào trên bất kỳ số lượng cổng nào.

Có hai cách để làm điều này:

  • xác định một địa chỉ cơ sở và một địa chỉ tương đối trong thiết bị đầu cuối dịch vụ của bạn
  • xác định đầy đủ địa chỉ trong mỗi endpoint

Nếu bạn làm tùy chọn # 1, bạn sẽ có một cái gì đó như thế này:

<service name="YourService"> 
    <host> 
    <baseAddresses> 
     <add baseAddress="net.tcp://YourServer:5151/Services" /> 
    </baseAddresses> 
    </host> 
    <endpoint name="endpoint1" 
      address="Service1" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
    <endpoint name="endpoint2" 
      address="Service2" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
</service> 

Vì vậy, trong trường hợp này, bạn có hai điểm cuối dịch vụ cho các hợp đồng tương tự, và họ sẽ được lắng nghe trên URL

net.tcp://YourServer:5151/Services/Service1 

net.tcp://YourServer:5151/Services/Service2 

Bạn có thể có các điểm cuối dịch vụ mulitple, nhưng chỉ một địa chỉ cơ sở.

Các tùy chọn khác là để không xác định địa chỉ cơ sở và chỉ định địa chỉ dịch vụ đầy đủ của bạn trong các thiết bị đầu cuối trực tiếp:

<service name="YourService"> 
    <endpoint name="endpoint1" 
      address="net.tcp://YourServer:5151/Services/Service1" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
    <endpoint name="endpoint2" 
      address="net.tcp://YourServer:6868/Services/Service2" 
      binding="netTcpBinding" 
      contract="IYourService" /> 
</service> 

Trong trường hợp này, vì bạn đang xác định toàn bộ địa chỉ trong thiết bị đầu cuối, bạn có thể chọn hai cổng TCP khác nhau, một cổng cho mỗi điểm cuối. Điều này sẽ làm việc với không có vấn đề gì cả. Bạn có hai điểm cuối riêng biệt trên hai cổng riêng biệt, cả nghe và được phục vụ bởi cùng một lớp dịch vụ trong nền.

Marc

+1

Tôi đã đọc một nơi nào đó mà các ký tự cơ sở được bỏ qua trong một trường hợp iis. – Konstantin

+0

Tôi sẽ đồng ý với nhận xét của bạn và cung cấp liên kết có nội dung như vậy. Khi nói đến IIS, cơ bản các địa chỉ cơ bản bị bỏ qua, nhưng ví dụ trên vẫn giữ vì các địa chỉ điểm cuối được cung cấp. Chúng được sử dụng ngầm với thông tin liên kết site trong IIS. http://msdn.microsoft.com/en-us/magazine/cc163412.aspx – dyslexicanaboko

0

Tôi một lần nữa.

này làm việc với tự chủ

<baseAddresses> 
      <add baseAddress="net.tcp://localhost" /> 
      <add baseAddress="net.tcp://localhost:12345" /> 
</baseAddresses> 

nhưng với IIS7 + WS nguyên nhân ngoại lệ

Không thể kết nối với net.tcp: // localhost: 12345/game2.svc. Nỗ lực kết nối kéo dài trong khoảng thời gian 00: 00: 02.0936160. Mã lỗi TCP 10061: Không thể kết nối vì máy đích đã chủ động từ chối nó 127.0.0.1:12345.

Câu hỏi đặt ra là về môi trường lưu trữ IIS

2

Tôi đã cố gắng để deply một dịch vụ WCF đến một trong các máy chủ web của tôi ngày khác và chạy vào một vấn đề.Tôi tiếp tục nhận được thông báo lỗi sau: p>

Bộ sưu tập này đã chứa địa chỉ với lược đồ http. Có thể có tối đa một địa chỉ cho mỗi lược đồ trong bộ sưu tập này. Tên thông số: mục

Sự cố không xảy ra trên máy cục bộ của tôi nhưng đã làm trên máy chủ web. Nó xảy ra trên máy chủ vì máy chủ web của tôi nằm trong môi trường lưu trữ được chia sẻ trong trường hợp dịch vụ WCF cũng cần biết tiêu đề máy chủ lưu trữ. Để thực hiện điều này, tôi đã điều hướng đến trong web.config và thêm vào các thông tin sau:

<serviceHostingEnvironment> 
<baseAddressPrefixFilters>  
    <add prefix=http://MyHostHeader /> 
</baseAddressPrefixFilters> 
</serviceHostingEnvironment> 
+1

Trong .NET 4.0, điều này được khắc phục qua

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