我有一個很奇怪的問題:我的DTO的客戶端非空的實例在服務器端收到爲null
。任何想法可能導致這種情況?我甚至不知道我應該在哪裏開始尋找...DTO從客戶端傳輸到服務器後更改爲空
一些代碼(這是正是我執行的代碼):
客戶端:
public class AuthenticatedUser
{
private readonly UserDto _user;
// ...
public bool SetNewPassword(string oldPasswordHash, string newPasswordHash)
{
using (var userService = new UserServiceClient())
{
if(_user == null)
throw new InvalidOperationException("Client side");
return userService.SetNewPassword(_user, oldPasswordHash,
newPasswordHash);
}
}
}
當我添加服務引用時,類UserDto
已自動創建。
服務器端:
public class UserService : IUserService
{
// ...
public bool SetNewPassword(UserDto userDto, string oldPasswordHash,
string newPasswordHash)
{
using (var unitOfWork = _unitOfWorkFactory.Start())
{
if (userDto == null)
throw new InvalidOperationException("Server side");
var user = unitOfWork.Repository.Get<User>()
.ByUserNameAndPasswordHash(userDto.UserName,
oldPasswordHash);
if (user == null)
return false;
user.PasswordHash = newPasswordHash;
return true;
}
}
}
我得到了InvalidOperationException
文本 「服務器端」 ......
UPDATE:
的UserDto
類在服務器端是這樣的:
public class UserDto
{
public UserDto() {}
public UserDto(User domainObject)
{
Mapper.Map(domainObject, this);
}
public String AcademicDegree { get; set; }
public String EmailAddress { get; set; }
public String FirstName { get; set; }
public Gender Gender { get; set; }
public Boolean HasChangedPassword { get; set; }
public Int32 Id { get; set; }
public Boolean IsActive { get; set; }
public String LastName { get; set; }
public IEnumerable<MailboxDto> Mailboxes { get; set; }
public String PasswordHash { get; set; }
public String PronunciationOfName { get; set; }
public String Role { get; set; }
public IList<ScheduledGreetingDto> ScheduledGreetings { get; set; }
public LanguageDto SpeakerLanguage { get; set; }
public String Title { get; set; }
public String UserName { get; set; }
}
有趣的是_user
客戶端上的字段我嘗試傳輸的是客戶端通過調用另一種服務方法從服務器獲取的實例,即傳輸UserDto
似乎一般工作...
你可以顯示UserDto類嗎?另外,您能否提供關於您正在使用的頻道以及您如何生成代理類的更多詳細信息? –