我正在构建一个WCF服务,我已经在IService文件中编写了合同并在Service文件中实现了它。当我尝试更改我声明的方法的任何返回值时,问题出现了因为它们被保存在CustomersService命名空间中的代码中,特别是在CustomersServiceClient类中,该类已被锁定且无法访问以进行更改。
这是我在ICustomersService文件中的代码:
[ServiceContract]
public interface ICustomersService
{
[OperationContract]
CustomerDetails GetCustomerDetails(string customerid);
[OperationContract]
bool VerifyId(string customerid);
}
以及CustomersService文件中的代码:
public CustomerDetails GetCustomerDetails(string customerid)
{
....
}
public bool VerifyId(string customerid)
{
...
}
并且在CustomerService1命名空间中我有这个已经生成并锁定的代码,所以任何修改我在IService中的方法的尝试都很麻烦,因为它在这里被锁定而且无法更改!
public class CustomersServiceClient : ClientBase<ICustomersService>, ICustomersService
{
public CustomersServiceClient();
public CustomersServiceClient(string endpointConfigurationName);
public CustomersServiceClient(Binding binding, EndpointAddress remoteAddress);
public CustomersServiceClient(string endpointConfigurationName, EndpointAddress remoteAddress);
public CustomersServiceClient(string endpointConfigurationName, string remoteAddress);
public CustomerDetails GetCustomerDetails(string customerid);
public bool VerifyId(string customerid);
}
对我来说这是一个严重的问题,我希望你能给我一些答案。
答案 0 :(得分:1)
Web服务比仅引用的程序集稍微复杂一些。如果更改服务接口,则不会自动更新代理类代码。每次更改合同时都需要手动更新它。
试试这个:
如果您引用该程序集,WCF也可以重用您的合同类型。在这种情况下,数据合同的更改将立即在客户端中看到。您可以在该答案中找到实施步骤: How to use a custom type object at the client