我有一个有趣的问题。每当我尝试将数据契约分离到他们自己的cs文件中时...当在服务方法中使用这些数据协定之一时,由于堆栈溢出异常,我终止进程。似乎我需要将数据协定放在接口类中以解决问题,但是,我希望在我的wcf服务应用程序中的DTO目录下为每个数据协定提供单独的cs文件。代码没问题,只有当我尝试将数据合同移动到他们自己的类中时才会发生错误。对于为什么会发生这种情况,一些见解会很好。 wcf测试客户端在使用方法时会生成正确的响应,但是当连接到我的控制台应用程序时。只有接口cs文件(Iservice.cs)中的数据协定才能使用方法,但是,自己的cs文件中的数据协定会抛出异常。
数据合同在其自己的cs文件中。
using developer1.Core.Dto.Account;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace developer1.Core.Dto.Account
{
[DataContract]
public class AccountDto
{
Guid accountId = Guid.NewGuid();
Guid userId = Guid.NewGuid();
string accountName = "default";
string bankName = "default";
[DataMember]
public Guid AccountId
{
get { return accountId; }
set { accountId = value; }
}
[DataMember]
public Guid UserId
{
get { return userId; }
set { userId = value; }
}
[DataMember]
public string AccountName
{
get { return accountName; }
set { accountName = value; }
}
[DataMember]
public string BankName
{
get { return bankName; }
set { bankName = value; }
}
}
}
使用对象的方法。
public AccountDto createAccount(string accountName, string bankName)
{
AccountDto newAccount = new AccountDto() { AccountName = accountName, BankName = bankName };
return newAccount;
}
Iservice class
using developer1.Core.Dto.Account;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
//using AccountDto = developer1.Core.Dto.Account.AccountDto;
namespace developer1.Core.ServiceContracts
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
[OperationContract]
CompositeType createComposite(string value);
[OperationContract]
List<AccountDto> GenerateMultipleAccounts(int count);
// TODO: Add your service operations here
[OperationContract]
AccountDto createAccount(string accountName, string bankName);
[OperationContract]
AccountDto2 createAccount2(string stringValue, bool boolValue);
}
// Use a data contract as illustrated in the sample below to add composite types to service operations.
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
public class AccountDto2
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
}
接口类中的任何数据协定都将使方法正常工作。但是他们自己的cs文件中的任何契约都会破坏带有堆栈溢出异常的方法