[PHP] Webdav +Exchange 2007

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Vanauit een externe bron krijg ik een xml aangeleverd met agenda items. Deze data is natuurlijk naar elke vorm te manipuleren.
Deze data wil ik in de agenda gaan zetten middels PHP en webdav. (of iemand moet een beter idee hebben dat ook gescheduled kan)

Hier loop ik nu tegen een probleem aan. Ik krijg altijd een 404 te zien.
De voorbeeld code van troywolf heb ik gebruikt. Of het probleem nu in IIS of in php code zit weeet ik niet.

Systeem:
Server 2008
Exchange 2007
PHP 5.2.5 x64

Mijn zoekresultaten:
Meest gevonden en eigenlijk enige beetje bruikbare info:
http://www.troywolf.com/a...hange_webdav_examples.php

MSDN:
http://msdn.microsoft.com...y/aa563735(EXCHG.80).aspx

Als ik de request opzettelijk vernaggel of mijn user/pass niet goed invul krijg ik netjes een foutmelding over bad request of authentication error.
Een juiste request lever een 404 op. Iemand enig idee waar ik het moet zoeken of wat ik fout doe:

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je zou eens kunnen beginnen met in de logs kijken :? Lijkt me de meest logische plek als je een 404 krijgt; en daarna even kijken wat de juiste url dan wél moet zijn :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
RobIII schreef op maandag 08 september 2008 @ 15:52:
Je zou eens kunnen beginnen met in de logs kijken :? Lijkt me de meest logische plek als je een 404 krijgt; en daarna even kijken wat de juiste url dan wél moet zijn :?
de url is ook wel goed. als ik die namelijk aanpas krijg je totaal andere foutmeldingen.

De url zoals ik die gebruikt:
https://home.domein.nl/exchange/leo@domein.nl/calendar/

als de url niet goed zou zijn, zou je namelijk helemaal niet de authenticatie hoeven te doen, dat gebeurt nu dus wel.

PHP:
1
2
3
4
5
if (!$h->fetch($exchange_server."/exchange/leo@domein.nl", 0, null, $exchange_username, $exchange_password, "SEARCH")) { 
  echo "<h2>There is a problem with the http request!</h2>"; 
  echo $h->log; 
  exit(); 
}


op de pagina van troywolf vind je de scripts, ik zal ze niet hier posten, zijn redelijk lang. ik zie niet wat hier mis gaat.
Mijn log van iis geeft nu ook niet informatie waar ik wat mee kan:

2008-09-08 17:01:17 fe80::e179:e0ed:5bdf:d2de%10 SEARCH /exchange/leo@domein.nl - 443 leo@domein.nl fe80::e179:e0ed:5bdf:d2de%10 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1) 404 0 0 453

[ Voor 34% gewijzigd door siepeltjuh op 08-09-2008 19:16 ]

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Kan je in een .Net taal niet beter uit de voeten? Ik denk dat er meer documentatie te vinden is in ieder geval.

Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
PolarBear schreef op maandag 08 september 2008 @ 19:25:
Kan je in een .Net taal niet beter uit de voeten? Ik denk dat er meer documentatie te vinden is in ieder geval.
Dat idee heb ik ook, maar goed webdav = webdav, dus de taal eromheen moet niet uitmaken. Hier gaat gewoon iets anders mis.
De vs2008 trial word nu gedownload, heb ook al een stuk code gevonden wat ik ga uitproberen. Moet alleen zeggen dat ik helemal niet bekend ben met .net systemen, dus baal hier wel een beetje van.

Ik snap niet dat het wel werkt bij al die andere mensen, maar bij mij niet.

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
Bij ASP dus precies hetzelfde probleem. Ik gebruik de volgende code; (authenticatie lukt hier dus ook, maar returned dan een 404)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<%@ Page %>
<%@Import namespace="System.Data"%>
<%@Import namespace="System.Net"%>
<%@Import namespace="System.Xml"%>
<%@Import namespace="System.Xml.XPath"%>
<%@Import namespace="System.Xml.Xsl"%>
<%@Import namespace="System.Web"%>
<%@Assembly name="System.DirectoryServices, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, Custom=null"%>
<%@Import namespace="System.DirectoryServices"%>
<%@Import namespace="System.Security.Cryptography.X509Certificates"%>
<script language="vb" runat="server">

Public Class AcceptAllCertificatePolicy
      Implements ICertificatePolicy
      Public Overridable Function CheckValidationResult(ByVal srvPoint As ServicePoint, ByVal certificate As X509Certificate, ByVal request As WebRequest, ByVal problem As Integer) As Boolean Implements ICertificatePolicy.CheckValidationResult
           Return True 'this accepts all certificates
      End Function
End Class


Sub Page_Load(sender As Object, e As EventArgs)
    System.Net.ServicePointManager.CertificatePolicy = New AcceptAllCertificatePolicy
        Dim Request As System.Net.HttpWebRequest
        Dim Response As System.Net.HttpWebResponse
        Dim strRootURI As String
        Dim strQuery As String
        Dim bytes() As Byte
        Dim workrow As System.Data.DataRow
        Dim resrow As System.Data.DataRow
        Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
        Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
        currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
        impersonationContext = currentWindowsIdentity.Impersonate()
    Dim MyCredentialCache As System.Net.CredentialCache
        Dim resdataset As New System.Data.DataSet
        Dim RequestStream As System.IO.Stream
        Dim ResponseStream As System.IO.Stream
        Dim ResponseXmlDoc As System.Xml.XmlDocument
    Dim objsearch As New System.DirectoryServices.DirectorySearcher
        Dim strrootdse As String = objsearch.SearchRoot.Path
        Dim objdirentry As New system.DirectoryServices.DirectoryEntry(strrootdse)
        Dim objresult As system.DirectoryServices.SearchResult
        Dim stremailaddress As String
        Dim strhomeserver As String
        objsearch.Filter = "(&(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)(|(homeMDB=*)" _
        & "(msExchHomeServerName=*))) )))(objectCategory=user)(userPrincipalName=*)(mailNickname=" & System.Environment.UserName & ")))"
        objsearch.SearchScope = DirectoryServices.SearchScope.Subtree
        objsearch.PropertiesToLoad.Add("mail")
        objsearch.PropertiesToLoad.Add("msExchHomeServerName")
        objsearch.Sort.Direction = DirectoryServices.SortDirection.Ascending
        objsearch.Sort.PropertyName = "mail"
        Dim colresults As DirectoryServices.SearchResultCollection = objsearch.FindAll()
        For Each objresult In colresults
            stremailaddress = objresult.GetDirectoryEntry().Properties("mail").Value
            strhomeserver = objresult.GetDirectoryEntry().Properties("msExchHomeServerName").Value
        Next
    strhomeserver = Right(strhomeserver, Len(strhomeserver) - (InStr(strhomeserver, "cn=Servers/cn=") + 13))
        strRootURI = "https://" & strhomeserver & "/exchange/" & stremailaddress & "/contacts/"
        strQuery = "<?xml version=""1.0""?>" & _
           "<D:searchrequest xmlns:D = ""DAV:"" >" & _
           "<D:sql>SELECT ""urn:schemas:contacts:cn"", ""http://schemas.microsoft.com/mapi/email1emailaddress"" " & _
           "FROM """ & strRootURI & """" & _
           "WHERE ""DAV:ishidden"" = false AND ""DAV:isfolder"" = false AND ""DAV:contentclass"" = 'urn:content-classes:person'" & _
           "</D:sql></D:searchrequest>"
        Request = CType(System.Net.WebRequest.Create(strRootURI), _
        System.Net.HttpWebRequest)
    Request.Credentials = System.Net.CredentialCache.DefaultCredentials
        Request.Method = "SEARCH"
        bytes = System.Text.Encoding.UTF8.GetBytes(strQuery)
        Request.ContentLength = bytes.Length
        RequestStream = Request.GetRequestStream()
        RequestStream.Write(bytes, 0, bytes.Length)
        RequestStream.Close()
        Request.ContentType = "text/xml"
        Request.Headers.Add("Translate", "F")
        Response = CType(Request.GetResponse(), System.Net.HttpWebResponse)
        ResponseStream = Response.GetResponseStream()
        ResponseXmlDoc = New System.Xml.XmlDocument
        ResponseXmlDoc.Load(ResponseStream)
    Dim myXslTransform As XslTransform
    myXslTransform = New XslTransform()
        myXslTransform.Load(Server.MapPath("showcontacts.xsl"))
    myXslTransform.Transform(ResponseXmlDoc,Nothing,Page.Response.Output)
End Sub
</script>
<HTML>
    <body>
    </body>
</HTML>

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
omg nou opgelost hoor :)

Het was nogal een bevalling, maar na 9Gb aan downloads, resource assembly via ews compilen en 100+ websites gegoogled te hebben ben ik eruit. zucht en wie zegt dat msdn makkelijk werken is kan van de ... krijgen :)


Via C# heb ik nu een tootlje gemaakt die van een XML bestand een appointment maakt. Dat is wat ik wou, nu nog al die php handel uit mn iis slopen aangezien dat niet gebruikt wordt

Heilige graal in dit verhaal:
http://msdn.microsoft.com...y/aa563060(EXCHG.80).aspx

Edit: voor de duidelijkheid: webdav en nog een stuk of 6 andere verbindingsmethoden zijn allemaal min of meer depricated in Exchange 2007. Je kan ze nog wel aan de praat krijgen, maar Ms raad het af. Daarvoor is nu 1 eenvoudig (dus niet) web service systeem. Dat EWS gebruik ik nu dus.

[ Voor 20% gewijzigd door siepeltjuh op 09-09-2008 16:29 ]

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • RielN
  • Registratie: Juni 2006
  • Laatst online: 18-08 23:57
de url is ook wel goed. als ik die namelijk aanpas krijg je totaal andere foutmeldingen.

De url zoals ik die gebruikt:
https://home.domein.nl/exchange/leo@domein.nl/calendar/

als de url niet goed zou zijn, zou je namelijk helemaal niet de authenticatie hoeven te doen, dat gebeurt nu dus wel.
Heel oud, ik ben er ook mee bezig, maar de url zou moeten zijn:


https://home.domein.nl/users/leo@domein.nl/calendar/
Pagina: 1