#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)