[英]WCF Service metadata publishing error
我是WCF的新手並試圖讓它運行起來。 我甚至無法得到一個沒有任何錯誤的空白版本。
web.config中:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="ServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
<!--wcf-->
<behavior name="recordsWCF">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="recordsSWCF" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<!--end wcf-->
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<!--wcf-->
<service name="records.wcf" behaviorConfiguration="recordsSWCF" >
<!--<endpoint address="" binding="webHttpBinding" contract="IService" behaviorConfiguration="recordsWCF"/>-->
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
<!--end wcf-->
<service name="Service">
<endpoint address="" behaviorConfiguration="ServiceAspNetAjaxBehavior" binding="webHttpBinding" contract="Service" />
</service>
</services>
</system.serviceModel>
至於我的wcf代碼,還有很多工作要做。 我只是想學習如何設置web.config沒有任何錯誤。 這是我的wcf定義:
[ServiceContract(Namespace = "records")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class wcf
{
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
[OperationContract]
[WebGet]
public string GetData()
{
Person p = new Person();
List<Person> test = new List<Person>();
p.Name = "Tom";
p.Age = 28;
test.Add(p);
p = new Person();
p.Name = "Dan";
p.Age = 22;
test.Add(p);
JavaScriptSerializer js = new JavaScriptSerializer();
string jsonString = js.Serialize(test);
return jsonString;
}
}
雖然它在web.config的records.wcf服務部分中被注釋掉,但是您正在公開(或將要公開)的端點看起來像是一個webHttpBinding端點,它是一個REST綁定。 WCF元數據交換端點僅用於SOAP端點(例如basicHttpBinding或wsHttpBinding)。 沒有辦法從這樣的WCF REST服務中獲取元數據。
如果您需要元數據,您有兩種選擇:
從你的問題來看,元數據並不是真正的目標,它只是一種檢查你的服務是否正常的方法。 如果是這種情況,您需要
您的web.config應如下所示:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<!--wcf-->
<behavior name="recordsWCF">
<webHttp/>
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="recordsSWCF" >
<!--<serviceMetadata httpGetEnabled="true" />-->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<!--end wcf-->
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<!--wcf-->
<service name="records.Service" behaviorConfiguration="recordsSWCF" >
<endpoint address="" binding="webHttpBinding" contract="records.Service" behaviorConfiguration="recordsWCF"/>
<!--<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />-->
</service>
<!--end wcf-->
</services>
</system.serviceModel>
實現服務的類應該如下所示
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Web.Script.Serialization;
namespace records
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceContract]
public class Service
{
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
[WebGet]
public string GetData()
{
Person p = new Person();
List<Person> test = new List<Person>();
p.Name = "Tom";
p.Age = 28;
test.Add(p);
p = new Person();
p.Name = "Dan";
p.Age = 22;
test.Add(p);
JavaScriptSerializer js = new JavaScriptSerializer();
string jsonString = js.Serialize(test);
return jsonString;
}
}
}
你的.svc的標記看起來應該是這樣的
<%@ ServiceHost Language="C#" Debug="true" Service="records.Service" CodeBehind="Service.svc.cs" %>
使用該配置,當我瀏覽到http://localhost:56157/Service.svc/GetData
我得到了
[{"Name":"Tom","Age":28},{"Name":"Dan","Age":22}]
你必須在Chrome中這樣做,而不是IE。 如果您在IE中嘗試它,它會嘗試將JSON作為文件打開。
請注意,在實現服務的同一個類上定義服務協定有點不尋常。 更常見的是,服務契約在接口(例如IService)上定義並在類中實現(例如公共類服務:IService)。
此外,除非有特殊原因使用WCF(例如,您想要執行SOAP服務),我強烈建議使用ASP.Net Web API進行REST服務。 我知道了很多關於WCF比ASP.Net一般和我還是覺得它很容易做的 REST與ASP.Net的Web API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.