Помимо опечатки в вашем коде, я полагаю, что у вас есть две проблемы, которые легко исправить:
1) Для службы RESTful вы должны определить поведение конечной точки и включить поведение webHttp.Вы можете сделать это, добавив <endpointBehavior>
в ваш web.config следующим образом:
<behaviors>
<serviceBehaviors>
<behavior name="ASEEESPrivate.PPInfoBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ASEEESPrivate.PPInfoEndpointBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
И затем добавьте это поведение конечной точки в определение вашего сервиса:
<service behaviorConfiguration="ASEEESPrivate.PPInfoBehavior" name="WcfRestService1.PPInfo">
<endpoint address="" binding="webHttpBinding" contract="WcfRestService1.IPPInfo"
behaviorConfiguration="ASEEESPrivate.PPInfoEndpointBehavior">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
2) Во-вторыхвы определяете UriTemplate
для вашего сервиса с заполнителями (результат, код авторизации и т. д.), но не определяете параметры для них в вашем интерфейсе.Если вы собираетесь определить UriTemplate
для своего определения сервиса с заполнителями, то вам нужно, чтобы ваш сервис определил эти параметры соответствующим образом.Вы можете сделать это следующим образом:
[ServiceContract]
public interface IPPInfo
{
// expecting RESULT = 0 and RESPMSG = APPROVED
[OperationContract]
[WebGet(UriTemplate = "ReadResponse?RESULT={result}&AUTHCODE={authcode}&RESPMSG={respmsg}&AVSDATA={avsdata}&PNREF={pnref}",
BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml)]
void ReadResponse(string result, string authcode, string respmsg, string avsdata, string pnref);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, AddressFilterMode = AddressFilterMode.Any)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class PPInfo : IPPInfo
{
public void ReadResponse(string result, string authcode, string respmsg, string avsdata, string pnref)
{
...
}
}
Используя UriTemplate
, вам не нужно извлекать параметры строки запроса;или, если вы хотите извлечь параметры из строки запроса, не определяйте UriTemplate
.
После внесения этих двух изменений я смог запустить службу на своем компьютере локально.
Надеюсь, это поможет!