간단한 WCF RESTful 웹 서비스를 만들려고했지만 SOAP 모드에서만 작동하는 것으로 보입니다. 로컬 IIS로 서비스를 호스팅하고 있습니다.WCF REST Service가 HTTP 400 잘못된 요청을 반환합니다.
는 정말 표준 같습니다
[ServiceContract]
public interface IMyService
{
[OperationContract]
Guid Login(string username, string password);
...
과 : 나는 또한 config 파일의 동작을 포함에서 사용 된
public class MyService : IMyService
{
[WebGet(UriTemplate = "login?user={user}&password={password}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
public Guid Login(string username, string password)
{
return Guid.Empty;
}
: 모두에 따라
<endpoint address="" binding="webHttpBinding" contract="MyService" behaviorConfiguration="webHttp"/>
을 내가 아는 예제 중 ...
이제는 ServiceReference를 사용하는 스텁 클라이언트에서 로그인을 호출 할 때 피들러에서 정상적으로 보이지만 SOAPy입니다. 어떤 이유로 든 RESTy 방식으로 내 서비스를 호출 할 수 없으며/help도 400 잘못된 요청을 반환하는 것 같습니다. (http://localhost:8080/MyService.svc/help 또는/login 등)
REST가 조치를 취할 수없는 이유는 무엇입니까? 미리 감사드립니다 :)
편집 : 답변을 찾았습니다.
그것은 하나의 Global.asax이를 추가 한 후 라우팅 ...
을 정의해야합니다 밝혀 :
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("MyService",
new WebServiceHostFactory(), typeof(MyService)));
}
그것은 잘 통해 갔다.
플러스 ".svc"는 이제 URL의 일부가 아닙니다.
일반적으로 GET을 통한 로그인은 개념적으로 상태 변경이므로 나쁜 사례로 간주됩니다. POST를 사용하십시오 (기본 설정은 HTTPS 이상). –
REST 서비스를 호출하려면 클라이언트 측에서 서비스 참조 추가를해서는 안됩니다. HttpWebRequest 클래스를 사용하여 RESTful 방식으로 호출해야합니다. – Rajesh