C# 在IIS中托管WCF Atom提要
我已经生成了一个简单的Atom 1.0提要,类似于 但是,我没有像示例中那样创建主机并通过控制台应用程序测试提要,而是尝试通过配置创建端点 我的配置如下:C# 在IIS中托管WCF Atom提要,c#,wcf,atom-feed,C#,Wcf,Atom Feed,我已经生成了一个简单的Atom 1.0提要,类似于 但是,我没有像示例中那样创建主机并通过控制台应用程序测试提要,而是尝试通过配置创建端点 我的配置如下: <system.serviceModel> <services> <service name="MyNamespace.MyService" behaviorConfiguration="returnFault
<system.serviceModel>
<services>
<service
name="MyNamespace.MyService"
behaviorConfiguration="returnFaults">
<endpoint
address=""
binding="basicHttpBinding"
contract="MyNamespace.IMyGenericService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="returnFaults">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
当我运行我的WCF服务时,我可以访问股票描述页面,甚至可以将此地址用作服务引用。但是,如果我尝试调用返回feed()的方法,我会得到一个没有错误的空白页。在方法中设置断点失败,因为该方法似乎未被调用
我的问题是,我应该如何公开此提要以通过IIS托管?我应该为我的端点使用不同的配置吗
作为参考,我的服务声明如下:
namespace MyNamespace
{
[ServiceContract]
public interface IMyGenericService
{
[OperationContract]
[WebGet]
Atom10FeedFormatter GetFeed();
}
public class MyService: IMyGenericService
{
public Atom10FeedFormatter GetFeed()
{
SyndicationFeed feed = new SyndicationFeed();
//SimpleEntry is a local class that holds location information in a GeoRSS Simple format.
IList<SimpleEntry> entries = new List<SimpleEntry>()
{
new SimpleEntry() { ID = "1", Point = "45.256 -71.92", Title = "Point 1" },
new SimpleEntry() { ID = "2", Point = "-71.92 45.256", Title = "Point 2" }
};
feed.Items = entries
.Select(e => new SyndicationItem()
{
Content = new XmlSyndicationContent(
"application/xml",
new SyndicationElementExtension(e)),
Title = new TextSyndicationContent(e.Title),
Id = e.ID
});
return new Atom10FeedFormatter(feed);
}
}
}
名称空间MyNamespace
{
[服务合同]
公共接口IMyGenericService
{
[经营合同]
[WebGet]
Atom10FeedFormatter GetFeed();
}
公共类MyService:IMyGenericService
{
公共Atom10FeedFormatter GetFeed()
{
SyndicationFeed=新的SyndicationFeed();
//SimpleEntry是一个本地类,它以GeoRSS简单格式保存位置信息。
IList条目=新列表()
{
新的SimpleEntry(){ID=“1”,Point=“45.256-71.92”,Title=“Point 1”},
新的SimpleEntry(){ID=“2”,Point=“-71.92 45.256”,Title=“Point 2”}
};
feed.Items=条目
.Select(e=>newsyndicationItem()
{
内容=新的XmlSyndicationContent(
“应用程序/xml”,
新的SyndicationElementExtension(e)),
Title=新文本联合内容(例如Title),
Id=e.Id
});
返回新的Atom10FeedFormatter(提要);
}
}
}
您将SOAP(通过配置中的basicHttpBinding
)和REST(使用操作合同上的AtomFeedFormatter和[WebGet]
属性)混为一谈
你需要选择其中一个。既然您想要Atom,我假设您真的想要配置中的webHttpBinding
:
<system.serviceModel>
<services>
<service
name="MyNamespace.MyService"
behaviorConfiguration="returnFaults">
<endpoint
address=""
behaviorConfiguration="RESTBehavior"
binding="webHttpBinding"
contract="MyNamespace.IMyGenericService">
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RESTBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="returnFaults">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
因为REST没有WSDL之类的东西,所以您也可以去掉任何与MEX相关的东西——只有普通的REST
请查看,以获得许多非常有用且信息丰富的附加资源