In order to call a web service in sandbox environment following steps should be followed.
Note: Assuming you already have created the web service and deployed it in IIS
1. Create a class library project and which is derived from “SPProxyOperation” (Microsoft.SharePoint.UserCode namespace).
Code Snippet
class ProxyProvider : SPProxyOperation{
if (args != null)
{
ProviderSoapClient client = new ProviderSoapClient();
ProviderArgs providerArgs = args as ProviderArgs;
return client.GetDepartmentByCode(providerArgs.DeptCode);
}
else
{
return "Error while calling Web Service...";
}
}
}
2. Create another class which should be used for passing arguments to the SPProxyOperation class
{
public int DeptCode
{
get;
set;
}
public ProviderArgs(int code)
{
this.DeptCode = code;
}
}
4. Implement Execute method of SPProxyOperation class.
5. Attach below attribute with the assembly
[assembly:System.Security.AllowPartiallyTrustedCallersAttribute()]
6. Make sure assembly is strongly named.
7. Deploy the assembly in GAC using GACUTIL(Since drag and drop assembly gives access denied error).
8. Register the assembly in Sharepoint
To register a assembly in Sharepoint “Power Shell” can be used.
Write below scripts in a .ps1 file and run from power shell
Param($assemblyName, $typeName)
$userCodeService = [Microsoft.SharePoint.Administration.SPUserCodeService]::Local
$proxyOperationType = new-object -typename Microsoft.SharePoint.UserCode.SPProxyOperationType -argumentlist $assemblyName, $typeName
$userCodeService.ProxyOperationTypes.Add($proxyOperationType)
$userCodeService.Update()
9. Since this is full trust proxy class so it would run under “SPUCWorkerProcessProxy.exe” so add the web service related configuration setting in SPUCWorkerProcessProxy.exe.config file which can be found under “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\UserCode” folder.
10. Now you are ready to call the web service method via Proxy operation class. Use below method to call the web service from your Sandbox Solution.
SPUtility.ExecuteRegisteredProxyOperation("AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fffdd72d4537ce50", "NameSpace.ClassName", new ArgumentClass(Argument));
2 comments:
I just posed a fully functional demo on my blog. Check it out. http://blog.brianbeach.com/2011/09/sharepoint-2010-full-trust-proxy.html
Thanks for leading me in the right direction. Too bad that means we won't be able to call any web services in Office 365. Maybe the new capabilities for BCS connections will provide that, but who can say.
Post a Comment