Member 13907608 Ответов: 1

Проблема вызова Wcf из клиентского проекта


Здравствуйте, я использую WCf sercive 1-й раз, и у меня есть проблема.
Когда я создаю тело запроса с одним параметром в интерфейсе, например

<pre lang="c#"> [OperationContract]
        string InsertSurvey (string Templatename);


а в КС страница вроде бы
public string InsertSurvey(string Templatename){}

он работает нормально, но когда я добавляю несколько периметров, например

<pre lang="c#"> [OperationContract]
        int UpdateSyrvey(string SurveyID, string Templatename);

а в КС страница вроде бы
public int UpdateSyrvey(string SurveyID,string Templatename)

я получаю ошибку
Operation 'UpdateSyrvey' of contract 'ISurveyUserManagmentApi' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.

я не понимаю, где я ошибаюсь .
и мой конфигурационный файл таков

<pre>
      <service  behaviorConfiguration="defaultBehavior" name="CheckboxWeb.Api.SurveyUserManagmentApi">
        <host>
          <baseAddresses>
            <add baseAddress="[CHECKBOX_ROOT]/Api" />
          </baseAddresses>
        </host>
        <!--<endpoint address="" contract="CheckboxWeb.Api.ISurveyUserManagmentApi" binding="basicHttpBinding" />
        <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />-->
        <endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="soapBinding" contract="CheckboxWeb.Api.ISurveyUserManagmentApi" />
        <endpoint address="pox" behaviorConfiguration="poxBehavior" binding="webHttpBinding" bindingConfiguration="webBindingPox" contract="CheckboxWeb.Api.ISurveyUserManagmentApi" />
        <endpoint address="json" behaviorConfiguration="jsonBehavior" binding="webHttpBinding" bindingConfiguration="webBindingJson" contract="CheckboxWeb.Api.ISurveyUserManagmentApi" />
        <!--<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />-->
        <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
      </service>

пожалуйста, помогите мне

Что я уже пробовал:

Найти в гугле, но не занижать. Образец кода не найден

1 Ответов

Рейтинг:
9

abdul shakib

use in  IService page 

[OperationContract]
      [WebInvoke(UriTemplate = "Login",
           Method = "POST",
           ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.WrappedRequest)]
      [WebGet(UriTemplate = "Login/{UserName}/{Password}")]

или
[OperationContract]
      [WebInvoke(UriTemplate = "Login",
           Method = "POST",
           ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.WrappedRequest)]
      ResponseModel<UserBase> Login(string UserName = null, string Password = null);





use in  Service page 



public ResponseModel<UserBase> Login(string UserName, string Password)
     {
         ResponseModel<UserBase> responseModel = new ResponseModel<UserBase>();
         try
         {
             using (var context = new Entities())
             {
                 User user = context.Users.Where(m => m.UserName == UserName && m.Password == Password).FirstOrDefault();
                 if (user != null)
                 {
                     UserBase userInfo = Utility.CommonFunctions.Cast<AutoPOS.Base.UserInfo.UserBase>(user);
                     userInfo.UserInRoles = new List<AutoPOS.Base.UserInfo.UserInRole>();
                     foreach (var item in user.UserInRoles)
                     {
                         AutoPOS.Base.UserInfo.UserInRole userInRole = Utility.CommonFunctions.Cast<AutoPOS.Base.UserInfo.UserInRole>(item);
                         userInRole.RoleMaster = Utility.CommonFunctions.Cast<AutoPOS.Base.RoleMaster.RoleMaster>(item.RoleMaster);
                         userInRole.RoleMaster.MenuPermissions = new List<Base.UserInfo.MenuPermission>();
                         foreach (var menuPermissions in item.RoleMaster.MenuPermissions)
                         {
                             Base.UserInfo.MenuPermission menuPermission = Utility.CommonFunctions.Cast<AutoPOS.Base.UserInfo.MenuPermission>(item);
                             menuPermission.MenuMaster = Utility.CommonFunctions.Cast<AutoPOS.Base.MenuMaster.MenuMaster>(menuPermissions.MenuMaster);
                             userInRole.RoleMaster.MenuPermissions.Add(menuPermission);
                         }
                         userInfo.UserInRoles.Add(userInRole);
                     }

                     responseModel.Status = 1;
                     responseModel.Data = userInfo;
                     responseModel.Message = "Success";
                 }
                 else
                 {
                     responseModel.Status = -1;
                     responseModel.Data = new UserBase();
                     responseModel.Message = "Error";
                 }
             }

         }
         catch (Exception ex)
         {
             responseModel.Status = -1;
             responseModel.Data = new UserBase();
             responseModel.Message = "Error";
         }
         return responseModel;
     }


Member 13907608

Спасибо, Адбул, это работает. :)

abdul shakib

добро пожаловать