Защита ADO.net Служба данных WCF с ASP.NET Членство

#c# #.net #asp.net #wcf #wcf-data-services

#c# #.net #asp.net #wcf #wcf-data-services

Вопрос:

привет,

Я использую WCF DataServices, я пытаюсь защитить ее с помощью asp.net членство

вот мой код,

 <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="SecureWSBindingWithMembershipConfig" >
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" />
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SecureServiceWithMembershipBehavior">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="AspNetSqlRoleProvider" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="DataService.WcfDataService" behaviorConfiguration="SecureServiceWithMembershipBehavior">
        <endpoint address="WcfDataService.svc" binding="wsHttpBinding" contract="System.Data.Services.IRequestHandler" bindingConfiguration="SecureWSBindingWithMembershipConfig" >
          <!--<identity>
              <dns value="" />
          </identity>-->
        </endpoint>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
  

Я получаю следующую ошибку:

Не удалось загрузить операцию ‘ProcessRequestForMessage’, поскольку у нее есть параметр или возвращаемый тип типа System.ServiceModel.Каналы.Сообщение или тип, который имеет MessageContractAttribute и другие параметры разных типов. При использовании System.ServiceModel.Каналы.Сообщение или типы с MessageContractAttribute, метод не должен использовать какие-либо другие типы параметров.

Комментарии:

1. Можете ли вы опубликовать свой код для своих сообщений? Кажется, вам нужно поместить все это внутри вашего объекта message. Вместо Method(RequestMessage request, OtherType type, string str, int value) у вас должно быть только Method(RequestMessage request) , и этот тип RequestMessage имеет только параметры, необходимые для метода.

Ответ №1:

Вы можете попробовать это, если это почти похоже на ваш код:

 Method(RequestMessage request, OtherType value)

// Your message contract much like this.
[MessageContract]
public class RequestMessage {
     [MessageBodyMember]
     public OtherType { get; set; }
}

// And your new method will be
Method(RequestMessage request)