Archive

Archive for the ‘SharePoint’ Category

Solución error en Sharepoint: The Copy web service method must be called on the same domain that contains the destination url.

enero 16, 2014 Deja un comentario

Este error se soluciona realizando un mapping de la url que se esta implementando para acceder al servicio por ejemplo la URL que generamos cuando salimos por HTTPS:

En un post anterior Explico como configurarlo:

https://mteheran.wordpress.com/2014/01/05/configurando-https-en-sharepoint/

Este Link también paso a paso como realizar el mapping de Urls en sharepoint:

http://sharepointtidbits.blogspot.com/2010/11/once-you-have-your-sharepoint-site-up.html

 

 

Accediendo a servicios de Sharepoint por HTTPs

enero 8, 2014 1 comentario

En un post anterior explico como configurar el HTTPs en los sitios de Sharepoint en este les explico el código de como consumirlo:
https://mteheran.wordpress.com/2014/01/05/configurando-https-en-sharepoint/

Primero debes instanciar estas reglas globales en nuestra clase donde estemos ejecutando cualquier servicio ya sea el List.asmx o el Copy.asmx:


ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;

Luego debemos crear nuestro punto de inicio y fin para el consumir el servicio


BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxBufferSize = 99999999;
binding.MaxReceivedMessageSize = 99999999;
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

Luego configuramos el punto final y realizamos la logica que necesitamos esta es igual para el servicio Lists.asmx para este caso muestro el ejemplo de como se usa con el Copy.asmx y realizo la opción de leer un archivo.

EndpointAddress endpoint = new EndpointAddress({Ursharepointl} + "/_vti_bin/Copy.asmx"));
using (CopySoapClient client = new CopySoapClient(binding, endpoint))
{
client.Endpoint.Address = new System.ServiceModel.EndpointAddress({Ursharepointl} + "/_vti_bin/Copy.asmx");
client.Endpoint.Contract.Name = "ws.App.SharePointDocuments.CopySoap";
client.Endpoint.Binding.Name = "basicHttpBinding";
client.Endpoint.Contract.ConfigurationName = "CopySoap";
NetworkCredential cred = new NetworkCredential(strUser, strPassWord);
client.ClientCredentials.Windows.ClientCredential = cred;
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

client.Open();
string destinationUrl = {RutaArchivo} + file;
byte[] bitFile;
FieldInformation[] outFields;
uint ret = client.GetItem(destinationUrl, out outFields, out bitFile);
fileinfo.Content = bitFile;
fileinfo.Errors = "";
fileinfo.P8_Url = destinationUrl;
client.Close();

}

Cualquier duda pueden dejarla en los comentarios.

Configurando HTTPS en Sharepoint

Lo primero que debemos hacer es crear el certificado y habilitar los sitios web de Sharepoint para que salgan por el protocolo seguro de HTTPS para ello pueden entrar al siguiente LINK:

http://speakingin.net/2007/04/06/trucos-habilitar-ssl-en-iis-70-usando-certificados-firmados-por-nosotros/

Debes hacer esto en los 2 sitios de sahrepoint en el IIS:

ConfigSharepoint_4

Para este ejemplo usamos la autenticación Windows como se mostró en la imagen anterior debes configurar esta en Sharepoint:

ConfigSharepoint_1

ConfigSharepoint_2

Por ultimo es sumamente importante que coloquemos el Mapping de la Url de Sharepoint cuando sale HTTPS esto permitirá que los servicios funcionen correctamente:

ConfigSharepoint_5

En otro Post esta la configuración para acceder a servicios de Sharepoint que salgan por HTTPS

Url dinámicas al llamar servicios sharepoint

noviembre 4, 2012 Deja un comentario

Cuando hacemos la referencia de los servicios de sharepoint su dirección queda registrada en web config y podemos modificar hay, sin embargo puede que subamos archivos o realicemos cambios a diferentes sitios así que es mejor cambiar la ruta del sitio en el código lo haremos así:

para el servicio de Copy por ejemplo:

CopySoapClient client = new CopySoapClient();
client.Endpoint.Address = new 
System.ServiceModel.EndpointAddress("http://MisitioSharepoint/_vti_bin/Copy.asmx");
client.Endpoint.Contract.Name = "ws.App.SharePointDocuments.CopySoap";
client.Endpoint.Binding.Name = "basicHttpBinding";
client.Endpoint.Contract.ConfigurationName = "CopySoap";//nombre de la referencia como queda en el webconfig


Y este seria para el servicio de ListSoap:

ListsSoapClient client = new ListsSoapClient();
client.Endpoint.Address = new 
System.ServiceModel.EndpointAddress("http://MisitioSharepoint/_vti_bin/Lists.asmx");
client.Endpoint.Contract.Name = "ws.App.SharePointListWebReference.ListsSoap";
client.Endpoint.Binding.Name = "basicHttpBinding";
client.Endpoint.Contract.ConfigurationName = "ListsSoap"; //nombre de la referencia como queda en el webconfig

Guardar y eliminar archivos en Sharepoint desde c#

noviembre 4, 2012 Deja un comentario

lo primero que necesitamos es hacer una referencia de los servicios que se usan para Sharepoint estos servicios son:

– http://MisitioSharepoint/_vti_bin/copy.asmx  // CopySoap

http://MisitioSharepoint/_vti_bin/Lists.asmx  // ListsSoap

Así quedaría entonces nuestro método para guardar archivos.

//Modo  de autenticacion del servicio

string ModoAutenticacion= "Digest";

string fileName = "ArchivoPrueba.txt";

string User = "Usuario_Sharepoint";

string PassWord = "Pas123";

byte[] file = null; // la información del archivo que vamos a subir

using (CopySoapClient client = new CopySoapClient())
{

// enviamos las credenciales para autenticarse

NetworkCredential cred = new NetworkCredential(User, PassWord);

if (ModoAutenticacion== "Digest")
{
client.ClientCredentials.HttpDigest.ClientCredential = cred;
client.ClientCredentials.HttpDigest.AllowedImpersonationLevel = 
System.Security.Principal.TokenImpersonationLevel.Impersonation;
}

if (ModoAutenticacion== "Windows")
{
client.ClientCredentials.Windows.ClientCredential = cred;
client.ClientCredentials.Windows.AllowedImpersonationLevel = 
System.Security.Principal.TokenImpersonationLevel.Impersonation;
}

client.Open();
string destinationUrl = "http://MisitioSharepoint/"+ filename;
string[] destinationUrls = { destinationUrl };

FieldInformation i1 = new FieldInformation { DisplayName = "Title",
 InternalName = "Title", Type = FieldType.Text, Value = filename };
FieldInformation[] info = { i1 };
CopyResult[] result;
byte[] data = file;

uint ret = client.CopyIntoItems(filename,destinationUrls,info,data,out result);

if (result != null && result.Length > 0 && result[0].ErrorCode != 0)
{
Inforesult.Errors = result[0].ErrorMessage;
}

client.Close();
}

Como ven es muy fácil crear el archivo en el sitio de sharepoint ahora para eliminar el archivo solo necesitamos esto:


string ModoAutenticacion= "Digest";

string fileName = "ArchivoPrueba.txt";

string User = "Usuario_Sharepoint";

string PassWord = "Pas123";

string LibraryName= "Papeles";

strin url = "http://MisitioSharepoint/";

using (ListsSoapClient client = new ListsSoapClient())
{

NetworkCredential cred = new NetworkCredential(User, PassWord);

if (ModoAutenticacion == "Digest")
{
client.ClientCredentials.HttpDigest.ClientCredential = cred;
client.ClientCredentials.HttpDigest.AllowedImpersonationLevel = 
System.Security.Principal.TokenImpersonationLevel.Impersonation;

}
else if (ModoAutenticacion == "Windows")
{
client.ClientCredentials.Windows.ClientCredential = cred;
client.ClientCredentials.Windows.AllowedImpersonationLevel = 
System.Security.Principal.TokenImpersonationLevel.Impersonation;
}

     string strBatch = "" +
                        "1" +
                        "{0}";

strBatch = string.Format(strBatch, url);
XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.XmlElement exBatch = xmlDoc.CreateElement("Batch");
exBatch.SetAttribute("OnError", "Continue");
exBatch.InnerXml = strBatch;

var ex = exBatch.ToXElement();

var result = client.UpdateListItems(LibraryName, ex);

}

Por ultimo necesitaremos este metodo para transformar nuestro XML a XElement

  public static class ExtensionMethods
    {
        public static XElement ToXElement(this XmlElement xml)
        {
            XmlDocument doc = new XmlDocument();

            doc.AppendChild(doc.ImportNode(xml, true));

            return XElement.Parse(doc.InnerXml);

        }
    }



Como ven es muy fácil subir y eliminar archivos en sharepoint, alguna duda la pueden comentar o si conocen algun otro método.