2

次の署名を持つ WCF があります。

    [WebGet]
    public bool UserHasRoles(string UserName, string ApplicationName)
    {
        if (SecurityCheck())
        {
            UserRightsApplicationEntities context = new UserRightsApplicationEntities();
            return context.UserRolesAndFunctions.Where(urf => urf.LogonName == UserName && urf.ApplicationName == ApplicationName).Count() > 0;
        }

        return false;
    }

サービスをコンパイルして実行できますが、呼び出すとエラーが発生します。「リクエスト URI が無効です。セグメント 'UserHasRoles' にキー述語または空の括弧を含めることはできません」.

どんな助けでも大歓迎です。

呼び出しコードは次のとおりです。

    public static bool UserHasRoles(string applicationName, string userName)
    {
        DataServiceQuery<bool> q = GetApplicationServicesDataContext()
            .CreateQuery<bool>(Constants.ServiceOperations.UserHasRoles)
            .AddQueryOption(Constants.ClassProperties.Application.ApplicationName, string.Format("'{0}'", applicationName))
            .AddQueryOption(Constants.ClassProperties.User.UserName, string.Format("'{0}'", userName));

        bool userHasRoles = q.Execute().FirstOrDefault();
        return userHasRoles;
    }

Web コールは次のとおりです。

"http://svr-webdev1:8081/UserRightsApplicationService.svc/UserHasRoles()?ApplicationName='User Rights Management'&UserName='domain\username'"

そして興味深いのは、次のように UserHasRoles から括弧を削除した場合です。

"http://svr-webdev1:8081/UserRightsApplicationService.svc/UserHasRoles?ApplicationName='User Rights Management'&UserName='domain\username'"

正しく動作します。

わかりましたので、うまくいくように見える別のアプローチを試しましたが、その理由はよくわかりません:

    public static bool DoesUserHaveRoles(string applicationName, string userName)
    {
        string queryString = string.Format("UserHasRoles?ApplicationName='{0}'&UserName='{1}'", applicationName, userName);

        bool doesUserHaveRoles = (GetApplicationServicesDataContext().Execute<bool>(new Uri(queryString, UriKind.Relative))).FirstOrDefault();
        return doesUserHaveRoles;
    }
4

0 に答える 0