我一直在开发一项服务,该服务将用于身份验证以及为 android 客户端和桌面客户端发送和接收数据。该服务基于以前的服务,该服务是为需要使用 SQL 成员资格提供程序进行身份验证服务的人创建的模板。
所以项目分为3个。一个是通用授权类,另一个是WCF服务,第三个是我用C#启动的客户端。
我的问题是我无法从添加到服务/接口的客户端访问任何新方法。我可以访问所有其他的,除了新的。它也没有出现在智能感知中。我有一个用于引用该项目的网络参考。我不确定为什么它是 Web 引用而不是服务引用,直到我很快意识到由于授权,它不允许添加服务引用。它基本上只是一遍又一遍地要求凭据。
以下是该服务的示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Security.Permissions;
using System.ServiceModel.Activation;
namespace DevLake.BasicAuth.Service
{
// AspNetCompatibilityRequirements is needed to capture the HttpContext.Current in establishing authorization
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class BasicAuthService : IBasicAuthService
{
public string TestServiceOK()
{
return "Basic Auth Service Working";
}
[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string TestRoleAccess()
{
return "Role can access";
}
public string TestMyService()
{
return DateTime.Now.ToString();
}
public void TestError()
{
throw new System.Exception("Test Exception");
}
}
}
下面是一个匹配接口的例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace DevLake.BasicAuth.Service
{
[ServiceContract]
public interface IBasicAuthService
{
[OperationContract]
string TestServiceOK();
[OperationContract]
string TestRoleAccess();
[OperationContract]
string TestMyService();
[OperationContract]
void TestError();
}
}
还有一个我用来调用服务中方法的代码的快速示例:
private void btnTestService_Click(object sender, RoutedEventArgs e)
{
try
{
wsBasicAuthService.BasicAuthService c = new wsBasicAuthService.BasicAuthService();
c.Credentials = new NetworkCredential(txtUserName.Text, txtPassword.Password);
MessageBox.Show(c.TestServiceOK());
}
catch (System.Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
任何人都可以看到任何可能导致这种情况的问题吗?