Tôi đang cố gắng để có được tập tin svc của tôi làm việc theo IIS. Trong dự án của tôi, khi tôi nhấn F5, tôi đã làm việc với svc. Vì vậy, tôi biết mọi thứ đều ổn, phải không? Ngoại trừ IIS.WCF Cách bật siêu dữ liệu?
Tôi đang làm việc trên máy Windows XP Pro và trong IIS tôi đã thêm một thư mục ảo.
Dưới đây là mã của tôi: IcarePlanActions (dự án: A)
namespace WcfServiceLibrary
{
[ServiceContract]
public interface ICarePlanActions
{
[OperationContract]
List<string> GetAllClients();
}
}
Chủ đầu tư: (dự án: A)
namespace WcfServiceLibrary
{
public class Client : ICarePlanActions
{
public List<string> GetAllClients()
{
List<string> clients = new List<string>();
clients.Add("Hendrik de Jong");
clients.Add("Miep de Berg");
clients.Add("Jaap Jongeneel");
clients.Add("Joop Prakman");
clients.Add("Pieter Schaakman");
return clients;
}
}
}
Web.config (Dự án: B)
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="CarePlanService.Service1Behavior"
name="WcfServiceLibrary.Client">
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary.ICarePlanActions">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CarePlanService.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
CarePlan.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary.Client" %>
Khi tôi chạy dịch vụ này (đó là trên IIS) với wfctestclient tôi nhận được lỗi này
Error: Cannot obtain Metadata from http://localhost/CarePlanService/CarePlan.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.
Tôi đang làm gì sai?
SOLUTION
tôi đã không nhận được dịch vụ làm việc theo IIS. Đầu tiên tôi tự tạo một thư mục ảo và trỏ đến directiry nơi có vị trí svc. Điều này không hiệu quả. Tôi không biết tại sao.
Sau đó, tôi đi đến Visual Studio và thay đổi cài đặt máy chủ (chuột phải vào dự án, tài sản, tab Web, nhấp Use local IIS Web Server
và nhấp Create Virtual Directory
. Khi tôi đã làm điều này, nó làm việc dưới IIS với đoạn code trên.
Tiêu đề đã chỉnh sửa - điều này không liên quan gì đến ngôn ngữ lập trình C#. –
Tôi đã không sử dụng WCF như thế này nhưng bạn nên đặt thực hiện dịch vụ của bạn bên trong datacontract? và nếu có, không có datamember được định nghĩa trong hợp đồng. Chỉ có vẻ kỳ lạ với tôi. Nhưng tôi đã không bao giờ được lưu trữ trong IIS ... – magnus
@ Martart: thực sự ngớ ngẩn câu hỏi: khi bạn đang cố gắng để kết nối bằng cách sử dụng WcfTestClient, là trang web lên? Nếu bạn thực hiện các thay đổi được đề xuất ở đây (hãy thả [DataContract], sử dụng "mexHttpBinding" cho điểm cuối mex), tôi không gặp vấn đề gì khi nhận siêu dữ liệu. Nhưng trước tiên bạn phải thực hiện "Xem trong trình duyệt" trên tệp * .svc, để khởi chạy máy chủ web tích hợp - và sau đó bạn có thể kết nối với URL bằng WcfTestClient –