Я создал веб-приложение asp. net, и внутри него я создал службу .SV C, затем развернул приложение в веб-приложении azure. Теперь, используя браузер, я могу вызвать файл .SV C и получить услугу wsdl следующим образом: -
, но внутри моего SharePoint , я регистрирую .SV C в качестве удаленного четного получателя, и SharePoint будет называть его .SV C, используя запрос POST. но это вызовет исключение.
, чтобы понять, почему SV C возвращает исключение на Post, я попытался вызвать .SV C с помощью Power Shell, и я получил такой результат: -
Использование сообщения: -
>>Invoke-WebRequest -Uri "https://****.azurewebsites.net/service1.svc" -Method Post
Invoke-WebRequest : The remote server returned an error: (404) Not Found.
At line:1 char:1
+ Invoke-WebRequest -Uri "https://****.azurewebsites.net/servic ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc
eption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Использование Get: -
>>Invoke-WebRequest -Uri "https://***.azurewebsites.net/service1.svc"
StatusCode : 200
StatusDescription : OK
Итак, я Я не уверен, почему я не могу вызвать .SV C, используя метод POST.
вот web.config: -
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<!--
For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.
The following attributes can be set on the <httpRuntime> tag.
<system.Web>
<httpRuntime targetFramework="4.7.2" />
</system.Web>
-->
<system.web>
<compilation debug="true" targetFramework="4.7.2"/>
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<appSettings file="custom.config">
<add key="ClientId" value="**"/>
<add key="ClientSecret" value="**"/>
</appSettings>
</configuration>
, а вот .SV C услуга: -
public class Service1 : IRemoteEventService
{
public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
{
string correlationID = properties.CorrelationId.ToString();
string siteUrl = properties.ItemEventProperties.WebUrl;
int listItemID = properties.ItemEventProperties.ListItemId;
Guid listID = properties.ItemEventProperties.ListId;
Trace.TraceInformation("Calling ProcessOneWayEvent in ItemCreated. Correlation ID is {0}. Site url is {1}. List ID is {2}. List Item ID is {3}", correlationID, siteUrl, listID, listItemID);
SPRemoteEventResult result = new SPRemoteEventResult();
using (ClientContext context = Helpers.GetAppOnlyContext(siteUrl))
{
result.ChangedItemProperties.Add("Title", "After adding");
result.Status = SPRemoteEventServiceStatus.Continue;
}
}
public void ProcessOneWayEvent(SPRemoteEventProperties properties)
{
var prop = properties;
var itemId = properties.ItemEventProperties.ListItemId;
var listTitle = properties.ItemEventProperties.ListTitle;
using (ClientContext clientContext = Helpers.GetAppOnlyContext(properties.ItemEventProperties.WebUrl))
{
var list = clientContext.Site.RootWeb.Lists.GetByTitle("12");
var item = list.GetItemById(properties.ItemEventProperties.ListItemId);
clientContext.Load(item);
clientContext.ExecuteQuery();
item["Title"] = item["Title"] + "test";
item.Update();
clientContext.ExecuteQuery();
}
}
}