2009-07-15 25 views
14

Tôi đang cố gắng xuất bản dịch vụ wcf bằng cách sử dụng nettcpbinding. Tôi muốn xuất bản siêu dữ liệu, sử dụng? Wsdl. Tôi đã thêm dòng sau vào tệp cấu hình:WCF NetTcpBinding với mex

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

nhưng tôi không thể thấy wsdl trong trình duyệt của mình. tôi đã làm gì sai? Cảm ơn.

Edit: Đây là phần liên quan của tập tin cấu hình của tôi:

<system.serviceModel> 
    <services> 
<service name="wcfcheck.service1" behaviorConfiguration="wcfcheck.Service1Behavior"> 
     <endpoint address="" binding="netTcpBinding" contract="wcfcheck.Iservice1"/> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
</service> 
    </services> 
<behaviors> 
<serviceBehaviors> 
    <behavior name="wcfcheck.Service1Behavior"> 
    <serviceMetadata httpGetEnabled="true" httpGetUrl=""/> 
    <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
</serviceBehaviors> 

Tôi có thể không được truy cập vào URL đúng. Tôi đã thử cả hai số http://localhost:51159/Service1.svc?wsdlhttp://localhost:51159/Service1.svc/mex?wsdl và không có '? Wsdl'.

+0

bạn định nghĩa điều gì về địa chỉ cơ sở? Tôi không thấy gì trong cấu hình của bạn ... bạn chỉ có địa chỉ = "mex" cho điểm cuối MEX - nhưng đó không phải là địa chỉ đầy đủ –

+0

Bạn cần có địa chỉ cơ sở http: // nơi có thể tìm thấy MEX hoặc bạn cần phải chỉ định một "httpGetUrl" trong thẻ của bạn. –

+0

Bất cứ điều gì tôi viết như baseaddress, hoặc trong httpGetUrl, dường như không hoạt động. ví dụ: http: // localhost: 51159/mex hoặc http: // localhost: 51159/service1.svc hoặc http: // localhost: 51159/service1.svc/mex hoặc thêm? wsdl không có gì hoạt động. Hãy giúp tôi! – Clangon

Trả lời

12

Bạn cần sử dụng phần tử <serviceMetadata>.

<behaviors> 
     <serviceBehaviors> 
     <behavior name="metadataSupport"> 
     <!-- Enables the IMetadataExchange endpoint in services that --> 
     <!-- use "metadataSupport" in their behaviorConfiguration attribute. --> 
     <!-- In addition, the httpGetEnabled and httpGetUrl attributes publish --> 
     <!-- Service metadata for retrieval by HTTP/GET at the address --> 
     <!-- "http://localhost:8080/SampleService?wsdl" --> 
     <serviceMetadata httpGetEnabled="true" httpGetUrl=""/> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
11

Bạn cần xuất bản siêu dữ liệu dịch vụ qua http cho wsdl. Thêm thẻ sau vào <System.ServiceModel> tag của tập tin cấu hình của bạn

<behaviors> 
    <serviceBehaviors> 
    <behavior name = "MetadataBehavior"> 
     <serviceMetadata httpGetEnabled = "true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Bạn cũng sẽ cần phải xác định một địa chỉ http nơi các siêu dữ liệu dịch vụ trong wsdl sẽ có sẵn từ. Thêm phần này vào < dịch vụ > nút của tập tin cấu hình của bạn:

<host> 
    <baseAddresses> 
    <add baseAddress="net.tcp://localhost:8001" /> 
    <add baseAddress="http://localhost:8000/Service1" /> 
    </baseAddresses> 
</host> 

Sau đó, nếu bạn đi đến http://localhost:8000/Service1?wsdl, bạn sẽ thấy wsdl cho dịch vụ của bạn.

+2

thẻ máy chủ lưu trữ trong phần nào? – Maslow

0

Bạn có thể thử ràng buộc mexTcp và đảm bảo địa chỉ cơ sở của bạn bắt đầu bằng net.tcp: // .....

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