2011-02-07 27 views
31

Lỗi siêu dữ liệu đó là những gì tôi nhận được khi tôi duyệt đến dịch vụ trong trình duyệt. Tôi không tiêu thụ nó với một khách hàngWCF Xuất bản siêu dữ liệu cho dịch vụ này hiện đang bị vô hiệu hóa + Lỗi loại nội dung

và Yes .. Tôi thêm <serviceMetadata httpGetEnabled="True"/>, và tôi có một thiết bị đầu cuối mex định nghĩa

nhưng nó vẫn sẽ không làm việc ..

Vì vậy, tôi đã tạo ra một dịch vụ barebones để lưu trữ trên IIS7. Cài đặt mới của Windows 7 và VS2010.

tôi đã theo các hướng dẫn của trang này để bức thư:

http://msdn.microsoft.com/en-us/library/ms733766.aspx

Tôi tin rằng điều này đã được một số loại vấn đề cấu hình với IIS7 nhưng và không chắc chắn. Đây là thiết lập dịch vụ của tôi:

EDIT:

tôi đã cố gắng truy cập vào các dịch vụ với svcutil và đã nhận lỗi sau:

The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'.. 

nó cũng nói: The HTML document does not contain Web service discovery information.

không chắc chắn làm thế nào để giải quyết nó , tuy nhiên ..

.svc tệp:

<%@ServiceHost language="C#" Debug="true" Service="DestructionServices.TacticalNukeSVC "%>

file .cs (nằm trong thư mục C: \ Development \ HostedDestructionServices \ App_Code thư mục):

using System; 
using System.ServiceModel; 

namespace DestructionServices 
{ 
    [ServiceContract] 
    public interface INukeInterface 
    { 
     [OperationContract] 
     string FireMissile(); 

     [OperationContract] 
     string DirectFire(double x, double y, double z); 

     [OperationContract] 
     void EnterCoordinates(double x, double y, double z); 
    } 

    public class TacticalNukeSVC : INukeInterface 
    { 
     public string FireMissile() 
     { 
      return "Boom"; 
     } 

     public void EnterCoordinates(double x, double y, double z) 
     { 
      //bah, who cares about coordinates.. 
     } 

     public string DirectFire(double x, double y, double z) 
     { 
      return "Fired at: " + x + ", " + y + ", " + z; 
     } 
    } 
} 

Web.Config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="DestructionServices.Destro" behaviorConfiguration="MetadataBehavior"> 
     <endpoint address="" binding="wsHttpBinding" contract="DestructionServices.INukeInterface" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MetadataBehavior"> 
      <serviceDebug includeExceptionDetailInFaults="True" httpHelpPageEnabled="True" /> 
      <serviceMetadata httpGetEnabled="True"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

IIS

+1

cũng có, thêm một nút baseAddress bị bỏ qua bởi IIS – KevinDeus

+0

vâng, nếu bạn lưu trữ trong IIS, xác định một địa chỉ cơ sở là tranh luận, vì IIS sẽ dictate nơi dịch vụ của bạn sống ... –

Trả lời

69

Mã và cấu hình của bạn có vẻ tốt - ngoại trừ một điểm nhỏ:

Trong thẻ <service> của bạn, bạn đã xác định một tên mà dường như không tương ứng với các lớp mà thực sự thực hiện dịch vụ của bạn:

<service name="DestructionServices.Destro" ......> 
       ************************** 

nhưng lớp học của bạn là:

namespace DestructionServices 
{ 
    ..... 
    public class TacticalNukeSVC : INukeInterface 
    { 

Những tên cần phải trận đấu! Các name= thuộc tính trên <service> thẻ trong cấu hình phải chính xác những gì lớp dịch vụ của bạn được gọi là - đầy đủ, bao gồm không gian tên - vì vậy trong trường hợp của bạn ở đây, nó phải là:

<service name="DestructionServices.TacticalNukeSVC" ......> 
+3

Đó là chính xác nó. Cảm ơn Marc. :) – KevinDeus

+1

Cảm ơn Marc, tôi đã phát điên. Tôi đã trải qua cùng một vấn đề và tôi đã dành ít nhất một ngày trên đó. –

+0

Wow điều này cố định nó cho tôi quá, không thể tìm ra lý do tại sao tôi vẫn nhận được lỗi mex ràng buộc mất tích khi nó đã có. Cảm ơn và +1! – Justin

0

gặp một vấn đề tương tự. Tôi đã có không gian tên sai trong thẻ dịch vụ của tôi trong web.config như chống lại không gian tên cho lớp dịch vụ trong tệp svc.

web.cấu hình

< service name="X.Y.Z.ContentService" behaviorConfiguration="XServiceBehavior"> 

tập tin svc

<%@ ServiceHost Language="C#" Debug="true" Service="X.Y.A.ContentService" %> 

Như đã thấy ở trên, dịch vụ thẻ trong web.config có namespace X.Y.Z nơi tệp svc có X.Y.A.

(Cảm ơn Marc)

2

WCF hoạt động trước đây với cài đặt đẹp ~ ngừng hoạt động và hiển thị - lỗi- Xuất bản siêu dữ liệu cho dịch vụ này hiện bị tắt.

dù MEX Cài đặt là hoàn hảo, vẫn WCF cho thấy ở trên lỗi, lý do: Thư mục ảo được tạo ra từ VS IDE không được tạo ra, mặc dù nó mang lại "thành công" tin nhắn ..

Chỉ Tạo Virtual Directory trong IIS bằng tay, Lỗi Bingo được giải quyết.

Hy vọng điều đó sẽ hữu ích!

0

Tôi gặp sự cố khác. Tôi có một ứng dụng asmx IIS, và bên trong tôi đã đặt một thư mục con với svc. Cấu hình nó đúng, nhưng nó đã không cho tôi metadata cho đến khi tôi thấy điều này trong web.config trong mẹ thư mục:

<system.web> 
    <webServices> 
    <soapExtensionTypes> 
     <add type="SPFWebService.SPFWebServiceExtension,App_Code" priority="1" group="0" /> 
    </soapExtensionTypes> 
    </webServices> 
</system.web> 

cố định nó bằng cách loại bỏ dịch vụ mới của tôi vào một thư mục riêng biệt.

0

nếu bạn có một lớp không có hàm tạo mặc định là một hàm tạo khác, sau đó thêm một hàm tạo mặc định rỗng, tôi đã gặp vấn đề tương tự và tôi đã giải quyết vấn đề này.

0

Tôi gặp sự cố tương tự. Đối với bất cứ ai mà có thể đi qua này sau này. Vấn đề của tôi là giao diện dịch vụ của tôi không có DataAnnotation [ServiceContract]

[ServiceContract] //<--This was missing 
public interface IServiceInterface 
{ 
    [OperationContract] 
    void Foo(Bar bar) 
    //... 
} 
Các vấn đề liên quan