卡住以调用 WCF 对象
本文关键字:WCF 对象 调用 | 更新日期: 2023-09-27 18:35:46
这很尴尬,试图自己找到解决方案,但真正缺乏知识我无法做到,所以我在这里发布我的问题。
我的 WCF 服务在调用我的服务时返回此值
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetProcessLocationsResponse xmlns="http://tempuri.org/">
<GetProcessLocationsResult >
<a:ProcessLocationData>
<a:Id>1</a:Id>
<a:Name>IL</a:Name>
</a:ProcessLocationData>
<a:ProcessLocationData>
<a:Id>2</a:Id>
<a:Name>MD</a:Name>
</a:ProcessLocationData>
<a:ProcessLocationData>
<a:Id>3</a:Id>
<a:Name>NY</a:Name>
</a:ProcessLocationData>
</GetProcessLocationsResult>
</GetProcessLocationsResponse>
</s:Body>
</s:Envelope>
在我的服务类中,我编写了此方法
public Array GetProcessLocations()
{
return this.GetSoapServiceClient().GetProcessLocations().ToArray();
}
public List<ProcessLocationData> GetProcessLocationsOnlyName()
{
return this.GetSoapServiceClient().GetProcessLocations().ToList();
}
我在 XYZ 中调用此服务.class如下所示
Array GetProcLocation= new GatewayService().GetProcessLocations();
这将返回整个对象,如 ID 和名称
但我试图通过调用"获取进程位置仅名称"方法来获取名称
我试图像下面那样做
array ProcName= ProcessLocationData.Name
应该返回服务中的所有名称,例如数组中的 (IL,MD,NY),但我无法以查看进程位置数据。
以另一种方式,我试图拆分数组(GetProcLocation)并仅获取名称并添加到新数组中? 这有意义吗?
请有人引导我走上正确的道路,提前谢谢。
我对你的问题有点困惑。我知道您希望有 2 种服务方法,它们都返回一个 ProcessLocationData 数组,一个返回带有 id 和名称的列表 (GetProcessLocations),另一个返回一个仅包含名称的 ProcessLocationData 数组(GetProcessLocationsOnlyName)。您的问题是客户端代理不包含 GetProcessLocationsOnlyName 方法。
应确保这两种方法都使用 OperationContract 进行批注,否则服务不会公开它们。您应该在服务接口或直接在服务中具有此属性。可以看到您的服务在 wsdl 中或使用 WCF 测试客户端公开了这两种方法。
然后,您必须确保您的客户端代理是最新的。
- 如果客户端代理是使用 Visual Studio 生成的,则应尝试更新服务引用
- 如果您的客户端代理是使用 svcutil 生成的,则必须手动重新生成它
与您的注释相关,如果您只想返回名称字段,您有以下选项。
- 您可以使用相同的 DataContract,这意味着返回 ProcessLocationData 的列表并为每个对象返回一个空 Id。
- 可以创建一个只有一个属性 Name 的新数据协定,并返回这些对象的列表
我的建议是使用相同的数据协定,并在数据访问方法中仅加载所需的数据。例如,创建一个新方法 GetProcessLocationsName(),该方法将创建仅加载其名称的 ProcessLocationData 列表。