0

私は、認証に使用され、Androidクライアントとデスクトップクライアントのデータを送受信するサービスに取り組んでいます。このサービスは、SQLメンバーシッププロバイダーを使用する認証用のサービスを必要とする人々のためのテンプレートとして作成された以前のサービスに基づいています。

そのため、プロジェクトは3つに分割されます。1つは共通の承認クラス用、もう1つはWCFサービス用、3つ目はC#で開始したクライアント用です。

私の問題は、サービス/インターフェースに追加したクライアントから新しいメソッドにアクセスできないことです。新しいものを除いて、他のすべてのものに問題なくアクセスできます。インテリセンスにも表示されません。プロジェクトを参照するために使用されるWeb参照があります。承認のためにサービス参照を追加できないことにすぐに気付くまで、なぜそれがサービス参照ではなく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);
            }
        }

誰かがこれを引き起こしている可能性のある問題を見ることができますか?

4

1 に答える 1

0

参照を更新しようとしましたか?参照を右クリックして更新できるはずです。これが機能しない場合は、削除して再度追加し、機能するかどうかを確認してください。

于 2013-03-22T01:47:30.610 に答える