2011-10-31 38 views
8

Tôi chỉ học wcf và không thể hiểu một điều rất cơ bản.wcf địa chỉ tương đối điểm cuối

Tôi đang tạo một dịch vụ WCF mà tôi muốn được lưu trữ trong IIS giống như ứng dụng web với đường dẫn riêng của nó như http://myhost/myapp/ và mọi thứ.

tôi là tạo ra các dự án dịch vụ WCF trong VS, tôi đã có một tập tin *.svc mô tả nó, sau đó tôi định nghĩa một thiết bị đầu cuối đơn giản để nó như thế:

<endpoint address="" 
      binding="basicHttpBinding" 
      contract="wcf_service_auth.IPshService" /> 

Sau đó, tôi công bố dịch vụ này như một Ứng dụng web IIS vào một thư mục ảo, giả sử tên của nó là psh_pub, vì vậy tôi có thể truy cập dịch vụ qua url http://localhost/psh_pub/pshservice.svc/. Nó cho tôi thấy trang chào WCF và cung cấp cho tôi một liên kết đến WSDL, cung cấp cho tôi mô tả wsdl chính xác.

OK.

Bước tiếp theo - Tôi muốn thêm điểm cuối MEX. Tôi thêm vào cấu hình:

<endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange"/> 

Đó là ok quá, các thiết bị đầu cuối có thể truy cập tại địa chỉ http://localhost/psh_pub/pshservice.svc/mexWcfTestClient.exe mang lại cho tôi cấu hình đúng từ địa chỉ đó.

Đây là vấn đề xảy ra.

Tôi có dịch vụ WCF hoạt động trong IIS và tôi muốn thêm một điểm cuối khác vào đó. Ví dụ: để nó là điểm cuối net.tcp. IIS được cấu hình theo mặc định để chấp nhận các kết nối net.tcp tại cổng 808 và tôi thêm net.tcp giao thức để tính chất của ứng dụng web của tôi, và tôi muốn thêm một thiết bị đầu cuối để dịch vụ của tôi như thế:

<endpoint address="" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

và bây giờ tôi giả sử rằng dịch vụ của tôi có thể truy cập được qua url net.tcp://localhost:808/psh_pub/pshservice.svc. Nhưng không phải vậy. Và mọi "cách thực hiện" và hướng dẫn sử dụng trên web đều cho biết tôi nên chỉ định địa chỉ đầy đủ trong tệp cấu hình như sau:

<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

Và nếu tôi làm như vậy, nó hoạt động. Nhưng nếu lưu trữ dịch vụ trong một thư mục ảo khác, tôi sẽ cần phải thay đổi cấu hình. Nếu tôi lưu trữ nó trên máy chủ khác, tôi sẽ cần phải thay đổi cấu hình. Nếu tôi lưu trữ nó trên nhiều máy chủ, tôi sẽ phải duy trì nhiều cấu hình như các máy chủ mà tôi có.

Vì vậy, câu hỏi chính là:

Có cách nào trong WCF để chỉ định một (hoặc https) endpoint net.tcp của một dịch vụ WCF IIS lưu trữ mà không ghi rõ url tuyệt đối cho nó?

Trả lời

7

Bạn sẽ có thể xác định địa chỉ cơ sở cho net.tcp điểm cuối dịch vụ của mình:

<service name="YourServiceName"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:808/psh_pub/" /> 
     </baseAddresses> 
    </host> 

Sau đó, bạn sẽ có thể sử dụng địa chỉ tương đối trong thiết bị đầu cuối thực tế của bạn:

<endpoint name="Tcp01" 
      address="pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 
</service> 
+0

tôi không biết những gì tôi vừa làm, nhưng tôi đã có một điểm cuối net.tcp làm việc với tham số "địa chỉ" trống. dù sao nhờ giúp đỡ. – pushist1y

4

Kích hoạt tệp WCF ít hơn (.Net 4.0) sẽ cho phép bạn đăng ký theo một con đường ảo tương đối sử dụng thuộc tính relativeAddress:

<system.serviceModel> 
    <serviceHostingEnvironment> 
    <serviceActivations> 
     <add relativeAddress="relative-virtual-path/yourservice.svc" 
      service="YourServiceImpl" /> 
    </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

liên quan đến địa chỉ cơ sở của ứng dụng Web

cuộc đàm phán

Liên kết này về nó: http://msdn.microsoft.com/en-us/library/ee354381.aspx

+0

tập tin ít kích hoạt cho phép tôi để thoát khỏi tập tin .svc, nhưng tôi không thể nhìn thấy nó như thế nào có thể giúp tránh chỉ định địa chỉ host tuyệt đối cho điểm cuối net.tcp. Tôi có nhớ gì không – pushist1y

+0

@ pushist1y Có một thuộc tính được gọi là relativeAddress trong các kích hoạt dịch vụ cho phép bạn chỉ định đường dẫn ảo tương đối để truy cập dịch vụ của bạn. Điều này không làm việc cho bạn? – Craig

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