将 wcf 服务添加到 WCF 测试客户端时出错 - 无法访问服务元数据
Error adding wcf service to WCF Test Client - Service metadata cannot be accessible
我创建了一个 WCF 服务并想测试我使用 WCF 测试客户端添加的一个方法。当我最初创建该方法时,它 return 编辑了一个 DataTable。当我使用 WCF 测试客户端添加服务时,服务是使用原始 app.config 文件添加的。 returning DataTable 的方法显示 'X' 因为我知道你不能 return 这种数据类型。所以我创建了一个包含 DataTable 的 class。 DataContract Subject 由该方法return编辑。代码如下:
[ServiceContract]
public interface IPaging
{
[OperationContract]
Subject GetSubjectList(string strUserID);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
[DataContract]
public class Subject
{
DataTable dtSubjectData = new DataTable();
[DataMember]
public DataTable SubjectTable
{
get;
set;
}
}
方法详情:
命名空间 PagingService
{
public class 分页:IPaging
{
主题 cSubject = new Subject();
public Subject GetSubjectList(string strUserID)
{
....
}
}
}
现在,当我尝试将服务添加到 WCF 测试客户端时,出现错误:
'Service metadata cannot be accessible.'
这是我的 app.config 文件:
<system.serviceModel>
<services>
<service name="PagingService.Paging" behaviorConfiguration="SimpleServiceBehavior">
<endpoint address="" binding="wsHttpBinding" contract="PagingService.IPaging">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/PagingService/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<!-- 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>
在我看来它与 app.config 文件无关,因为原始条目在方法 returned DataTable 时有效。但是现在 return 类型现在是 'Subject',它没有在某处更新。
当你更改方法签名时,是否还有其他我缺少的地方需要更改?
谢谢。
为什么不直接序列化 DataTable 并将其作为 XML 字符串发回?在客户端,您可以使用 DataTable.ReadXML.
在客户端创建一个 DataTable
我创建了一个 WCF 服务并想测试我使用 WCF 测试客户端添加的一个方法。当我最初创建该方法时,它 return 编辑了一个 DataTable。当我使用 WCF 测试客户端添加服务时,服务是使用原始 app.config 文件添加的。 returning DataTable 的方法显示 'X' 因为我知道你不能 return 这种数据类型。所以我创建了一个包含 DataTable 的 class。 DataContract Subject 由该方法return编辑。代码如下:
[ServiceContract]
public interface IPaging
{
[OperationContract]
Subject GetSubjectList(string strUserID);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
[DataContract]
public class Subject
{
DataTable dtSubjectData = new DataTable();
[DataMember]
public DataTable SubjectTable
{
get;
set;
}
}
方法详情: 命名空间 PagingService { public class 分页:IPaging { 主题 cSubject = new Subject();
public Subject GetSubjectList(string strUserID)
{
....
}
}
}
现在,当我尝试将服务添加到 WCF 测试客户端时,出现错误: 'Service metadata cannot be accessible.' 这是我的 app.config 文件:
<system.serviceModel>
<services>
<service name="PagingService.Paging" behaviorConfiguration="SimpleServiceBehavior">
<endpoint address="" binding="wsHttpBinding" contract="PagingService.IPaging">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/PagingService/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<!-- 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>
在我看来它与 app.config 文件无关,因为原始条目在方法 returned DataTable 时有效。但是现在 return 类型现在是 'Subject',它没有在某处更新。
当你更改方法签名时,是否还有其他我缺少的地方需要更改?
谢谢。
为什么不直接序列化 DataTable 并将其作为 XML 字符串发回?在客户端,您可以使用 DataTable.ReadXML.
在客户端创建一个 DataTable