中使用无效服务操作我想调用在Wcf数据服务上定义的服务操作,该操作返回void从WCF数据服务客户端(继承自System.Data.Services.Client.DataServiceContext)在WCF数据服务
[WebGet]
public void Operation()
{
// logic
}
我发现的唯一合理的方法是执行,但我怎么能用它作为void操作?
谢谢
中使用无效服务操作我想调用在Wcf数据服务上定义的服务操作,该操作返回void从WCF数据服务客户端(继承自System.Data.Services.Client.DataServiceContext)在WCF数据服务
[WebGet]
public void Operation()
{
// logic
}
我发现的唯一合理的方法是执行,但我怎么能用它作为void操作?
谢谢
我找到了解决此问题的解决方法。 这个网站之前解决了我很多问题,所以我认为这将是很高兴分享回来。
快速回答你的问题是:
string empty = context.Execute<string>(new Uri("Operation", UriKind.Relative)).FirstOrDefault();
“空”字符串为空或空时响应。它“适用于”上面提到的HttpWebRequest方法。
此外,使用这种技术还可以得到原始类型。 比方说我有这样的方法:
[WebGet]
public bool Authenticate(string Username, string Password)
{...do stuff here...}
当您尝试正常执行失败(维特克卡拉斯解释得好他效应初探以上):
var query = context.CreateQuery<bool>("Authenticate").AddQueryOption("Username", "'itye'").AddQueryOption("Password","'123456'");
DataServiceCollection<bool> list = new DataServiceCollection<bool>();
list.Load(query);
但下面将做的伎俩:
var query = context.CreateQuery<bool>("Authenticate").AddQueryOption("Username", "'itye'").AddQueryOption("Password","'123456'");
bool authenticated = context.Execute<bool>(new Uri(query.RequestUri.ToString().Replace("Authenticate()", "Authenticate"))).FirstOrDefault();
请注意替换( “身份验证()”, “认证”),其省略了()的查询字符串(否则会造成错误)。
希望它有帮助。 - Itye
你可以使用只是普通的HttpWebRequest来做到这一点。我认为它将需要POST服务操作(因为GET会采取一些响应,但是由于您将其声明为无效,所以不会有任何响应)。在这种情况下,无论如何都不能使用Execute(因为它总是发出GET请求)。 使用普通的HttpWebRequest只是发出一个简单的POST服务操作URL,只是检查响应状态代码(应该是204无内容)。 当前WCF数据服务没有本地客户端对服务操作的支持,所以您需要为自己编写一个。
谢谢Itye 我正在寻找类似的解决方案。首先使用HttpWebRequest方式。但是你的两行代码帮助我完成了相同的任务。很高兴。再次感谢。 var query = context.CreateQuery(“Authenticate”)。AddQueryOption(“Username”,“'itye'”)。AddQueryOption(“Password”,“'123456'”);
bool authenticated = context.Execute(new Uri(query.RequestUri.ToString()。Replace(“Authenticate()”,“Authenticate”)))。FirstOrDefault();