OperationContract
データベースにデータをクエリして挿入しようとする方法があります。メソッドを使用してPOST
、ブラウザの JavaScript からサービスを呼び出しています。WCF サービスは同じドメインにあるため、使用する必要はありませんJSONP
。また、データを変更しているので、POST
リクエストではなくリクエストである必要がありGET
ます。ただし、「メソッドは許可されていません」というエラーが引き続き発生します。誰かがこの状況に遭遇しましたか?
私のサービスはで呼び出されています
http://some_url.com/services/ProfileService.svc/json/CurrentUser
GET
奇妙なことに、この URL にアクセスすると、 を指定したにもかかわらず、リクエスト経由で呼び出されるようPOST
です。ただし、ページの読み込み時には、POST
リクエストを試みているようです。
URL にアクセスしたときのブラウザの応答:
Request URL:http://some_url.com/services/ProfileService.svc/json/CurrentUser
Request Method:GET
Status Code:405 Method Not Allowed
Request Headersview parsed
GET /services/ProfileService.svc/json/CurrentUser HTTP/1.1
これが私が呼び出そうとしている私のメソッドです:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)]
public HIPUser GetCurrentUser()
{
string[] domainUser;
string Auth_User = HttpContext.Current.User.Identity.Name.ToString().ToLower();
domainUser = Auth_User.Split('\\');
string user = domainUser[1];
Debug.WriteLine(user);
ProfileManager pm = new ProfileManager();
var results = pm.GetUserByUserName(user);
if (results.Length > 0)
{
return results.First();
}
else
{
Debug.WriteLine("IS NULL");
var x = pm.CreateUser(user, null, null);
Debug.WriteLine(x.UserName);
return x;
}
}
クライアント:
function getCurrentUser() {
$.ajax({
type: "POST",
url: "services/ProfileService.svc/json/GetCurrentUser",
contentType: "application/json; charset=utf-8",
data: null,
dataType: "json",
error: function (request, error, u) {
alert('blargherror: ' + error);
},
success: function (result, status) {
alert(result.d);
}
});
}
必要かどうかはわかりませんがWeb.Config
:
<behaviors>
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metaBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment
aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="ProfileService" behaviorConfiguration="metaBehavior">
<endpoint address="/json"
behaviorConfiguration="jsonBehavior"
binding="webHttpBinding"
bindingConfiguration="secure"
contract="ProfileService" />
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="secure"
contract="ProfileService" />
</service>
</services>
Web.Config の編集 - バインディングの追加
<bindings>
<webHttpBinding>
<binding name="secure">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
<basicHttpBinding>
<binding name="secure">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>